首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有应用程序级ProxyHost/ProxyPort设置的NSURLRequest

带有应用程序级ProxyHost/ProxyPort设置的NSURLRequest
EN

Stack Overflow用户
提问于 2013-08-22 18:52:05
回答 1查看 2.1K关注 0票数 1

我正在寻找一种在应用程序级proxyHost/Port设置中使用NSMutableURLRequest的方法,本质上是用proxyHost/proxyPort替换ASIHTTPRequest库。我尝试过修改CFReadStream (来自NSURLRequest HTTPBodyStream),但是它在设置代理设置时使用了SIGSEG。我不想用CFNetworking重写我的应用程序,看起来AFNetwork库也不包含这个特性。

有人用NSMutableURLRequest成功地做到了这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-30 22:49:17

真正的答案似乎是创建一个自定义NSURLProtocol。应该是一个直接的前向派生,并将适当的proxyHost/proxyPort添加到请求中(以及任何其他值,例如自定义的用户代理字符串)。然后,据推测,所有请求都将通过这个自定义协议(包括UIWebView、requests..direct或派生)进行路由。

有关样本:

ref/doc/uid/DTS40013653

http://eng.42go.com/customizing-uiwebview-requests-with-nsurlprotocol/

当我开始操作的时候我会发布更多的信息。

在这个实现中值得注意的事情。

  1. 最初开始使用CFNetworking作为自定义NSURLPRotocol中的“楔子”,但很快发现我正在重写与ASIHTTPRequest相同的代码。所以我只是用ASIHTTPRequest实现了这个楔形。
  2. 没有很好地记录下来的项目是UIWebView与NSURLProtocol回调的交互,vs NSURLRequest/Conenction与NSURLProtocol的交互。一些调查结果:

代码语言:javascript
复制
- a) All dependent page resources are loaded automatically by UIWebView (which we knew), and they all go through NSURLProtocol, so it is an excellent place to put in code to modify all requests.
- b) The UIWebView sets the Referer header.  On a redirect, the only way to get the UIWebView to update it's Referer from the original URL to the new redirect URL is with the `[[self client] URLProtocol:self wasRedirectedToRequest:redirectRequest redirectResponse:tmpHttpResponse];` callback.
- c) when the above redirect callback is received by UIWebView, it

生成一个新的NSURLRequest (实质上是您发送回的那个)

)。所以如果你有个楔子喜欢重定向

在内部,您必须取消它试图提出的请求,以支持来自UIWebView的新请求。

  1. 您必须小心您从ASIHTTPRequestDelegate实现的回调。例如,实现didReceiveData将禁用内置的gzip处理。willRedirectToURL禁用大多数内置的重定向处理(即使您按照注释中的建议调用[request redirectToURL:newURL]; )。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18388633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档