如果 proxy.pac 下载失败,NSURLConnection 自动直接连接

Posted

技术标签:

【中文标题】如果 proxy.pac 下载失败,NSURLConnection 自动直接连接【英文标题】:NSURLConnection automatic direct connection if proxy.pac download fails 【发布时间】:2011-01-27 19:40:49 【问题描述】:

我有一个使用 NSURLConnection 与 Web 服务器通信的应用程序。如果我启用了自动代理配置设置并且该设置中的 URL 指向不可用的服务器,我的 NSURLConnection 尝试将失败并出现超时错误。如果我再次发出请求,NSURLConnection 将尝试直接连接(必须注意代理失败)并且请求成功。

我注意到,一旦代理超时,Safari 也会尝试直接连接,但它会自动执行此操作。我下载了最新的 WebKit nightly 源,构建它并试图弄清楚这是如何完成的。对于我的生活,我无法弄清楚 WebKit 是如何获得这种行为的。它创建一个 NSURLConnection 但 -connection:didFailWithError: 永远不会被调用。代理超时后,-connection:didReceiveResponse: 委托被调用,因为它进行了直接连接。我可以看到,WebKit 代码中没有任何东西检测到这个代理超时并强制重新加载。这必须发生在 NSURLConnection/NSURLRequest 中。

如何让 NSURLConnection 在代理失败时自动重试直接连接?我希望它能够像在 Safari/WebKit 中一样工作。

【问题讨论】:

【参考方案1】:

我想通了。它与请求超时间隔有关。 NSURLRequest 的默认超时间隔是 60 秒。初始代理超时发生需要将近 90 秒,因此 NSURLConnection 没有回退到直接连接。一旦我增加了请求的超时时间,它就开始工作了。

【讨论】:

以上是关于如果 proxy.pac 下载失败,NSURLConnection 自动直接连接的主要内容,如果未能解决你的问题,请参考以下文章

如何为windows所有连接使用pac文件进行代理

xfce chrome proxy

如何配置 Safari webdriver 以使用 .pac 文件

如果下载失败或成功,我如何测试文件下载并继续下载直到成功?

如果安装了 AVG 防病毒软件,则下载失败

Jenkins - 如果构建失败,将下载链接添加到文件