我正在编写一个需要向互联网发出小型HTTP请求的iPhone应用程序。在我们的公司局域网中,所有HTTP流量都必须经过Squid。
模拟器显然能够使用代理 - 因为Mobile Safari可以工作。但是,如何在代码中获取/设置代理设置?
为模拟器注释掉了一堆标题。例如,
CFNetworkCopySystemProxySettings
在CFProxySupport.h中,模拟器无法使用 - 仅限于设备。我试过像这样的硬编码:
CFReadStreamSetProperty(stream, kCFProxyHostNameKey, @"internal.proxy.servername");
CFReadStreamSetProperty(stream, kCFProxyPortNumberKey, [NSNumber numberWithInt:80]);
CFReadStreamSetProperty(stream, kCFProxyTypeKey, kCFProxyTypeHTTP);
但没有快乐。
思想?
答案 0 :(得分:6)
您可以尝试:
“系统偏好设置” - > “网络” - >选择您的网络设备 - > “高级” - > “代理”
答案 1 :(得分:5)
关闭此功能。看起来这已经在iOS4 SDK中修复了 - 模拟器上的网络堆栈将使用Mac的代理进行任何HTTP调用。
答案 2 :(得分:4)
您可以尝试使用Proxifier:http://www.proxifier.com/mac/ 它使您可以为任何程序设置代理。
不是你问的,但它应该可以解决你的问题。
答案 3 :(得分:2)
看起来XCode 4.0(4A304a)再次破坏了这一点。如果我将堆栈设置为通过Burp代理http调用,那么对于每个应用程序(Safari等)都可以正常工作,但是模拟器。
答案 4 :(得分:2)
只需重启iPhone模拟器即可。
为此我使用以下技巧
转到设置>>一般>>辅助功能>>要打开的粗体文字>>选择器视图打开并要求重新启动以使其有效>>按“继续”>> iPhone模拟器现在重启
弹出窗口询问代理的用户名和密码......
答案 5 :(得分:1)
这个问题有点陈旧,但我想加上我的发现可供参考。至少在iOS 4.x SDK中,以下代码适用于模拟器和iPhone。
CFDictionaryRef systemProxyDict = CFNetworkCopySystemProxySettings();
CFReadStreamSetProperty(m_resultRef, kCFStreamPropertyHTTPProxy, systemProxyDict);
答案 6 :(得分:0)
模拟器可能无法使用代理。它使用的是Mac OS X提供的标准网络堆栈,而 正在使用代理。
如果常规在模拟器使用过程中被注释掉了,并且你已经尝试过硬编码而没有运气,那么这可能是模拟器和设备之间的许多不一样的东西之一,而你我们必须在设备上测试你的应用程序的这一部分。
答案 7 :(得分:0)
应用配置后关闭并重新打开模拟器。