iOS11 之前的处理方法:NSURLProtocal拦截后,手动管理 Cookie 的存储:
步骤:做 IP 替换时将原始 URL 保存到 Header 中
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在iOS 11之前,通过NSURLProtocol手动管理Cookie和处理URL请求的重定向或修改是一种常见的做法。您提供的代码片段展示了如何在自定义的NSURLProtocol子类中实现这一过程,主要涉及两个关键步骤:替换URL中的主机名(IP地址替换)以及手动处理响应中的Cookie。
您的代码首先在canonicalRequestForRequest:
方法中对原始请求进行修改,这里进行了以下操作: - 获取原始请求的URL,并从中提取主机名。 - 使用异步接口getIpByHostAsync:
获取该主机名对应的IP地址。 - 如果成功获取到IP地址,则将原始URL中的主机名替换为IP地址,并更新请求的URL。 - 为了确保请求能够正确路由,将替换前的主机名添加到请求的HTTP头字段"host"中。 - 同时,将原始URL保存到请求的另一个自定义HTTP头字段"originalUrl"中,以便后续处理使用。
接下来,在handleCookiesFromResponse:
方法中,您基于从响应中获取的信息来手动管理Cookie。具体步骤包括: - 首先,从原始请求中读取之前保存的"originalUrl",以确定应将Cookie关联到哪个原始域名。 - 然后,检查响应是否为NSHTTPURLResponse类型,如果是,则访问其所有头部字段。 - 接下来,理论上应该遍历这些头部字段,查找与Cookie相关的字段(如"Set-Cookie"),并根据需要存储或更新这些Cookie信息。不过,您提供的代码在这里似乎被截断了,没有展示具体的Cookie处理逻辑。
NSHTTPCookieStorage
来保存或更新这些Cookie,确保它们能被后续的网络请求所使用。