19

我正在编写一个需要向 Internet 发出小型 HTTP 请求的 iPhone 应用程序。在我们公司的 LAN 中,所有 HTTP 流量都必须通过 Squid。

模拟器显然能够使用代理——因为 Mobile Safari 可以工作。但是,如何在代码中获取/设置代理设置?

为模拟器注释了一堆标题。例如,

CFNetworkCopySystemProxySettings

在 CFProxySupport.h 中对模拟器不可用 - 仅对设备可用。我试过这样的硬编码:

CFReadStreamSetProperty(stream, kCFProxyHostNameKey, @"internal.proxy.servername");
CFReadStreamSetProperty(stream, kCFProxyPortNumberKey, [NSNumber numberWithInt:80]);
CFReadStreamSetProperty(stream, kCFProxyTypeKey, kCFProxyTypeHTTP);

但没有喜悦。

想法?

4

8 回答 8

6

您可以尝试:
“系统偏好设置”->“网络”->选择您的网络设备->“高级”->“代理”

于 2009-07-23T05:31:32.117 回答
5

您可以尝试使用 Proxifier: http: //www.proxifier.com/mac/ 它使您可以为任何程序设置代理。

不是你问的,但它应该可以解决你的问题。

于 2009-02-18T04:39:32.147 回答
5

要关闭它。看起来这在 iOS4 SDK 中已修复 - 模拟器上的网络堆栈将使用 Mac 的代理进行任何 HTTP 调用。

于 2010-11-23T23:00:08.343 回答
2

看起来 XCode 4.0 (4A304a) 再次打破了这一点。如果我将堆栈设置为通过 Burp 代理 http 调用,那么除了模拟器之外的每个应用程序(Safari 等)都可以正常工作。

于 2011-03-14T18:35:45.287 回答
2

只需重新启动 iPhone 模拟器。

为此,我使用以下技巧

转到设置>>常规>>辅助功能>>粗体文本打开>>选择器视图打开并要求重新启动以使其生效>>按继续>> iPhone模拟器现在重新启动

弹出窗口询问代理的用户名和密码...

在 ios 模拟器 7.1 中测试

于 2014-03-12T12:27:04.823 回答
1

这个问题有点老了,但我想我会添加我的发现以供参考。至少在 iOS 4.x SDK 中,以下代码可在模拟器和 iPhone 上运行。

CFDictionaryRef systemProxyDict = CFNetworkCopySystemProxySettings();
CFReadStreamSetProperty(m_resultRef, kCFStreamPropertyHTTPProxy, systemProxyDict);
于 2010-09-15T18:55:05.973 回答
0

模拟器可能无法使用代理。它使用 Mac OS X 提供的标准网络堆栈,就是使用代理的方式。

如果在模拟器使用期间常量被注释掉,并且您尝试对其进行硬编码但没有运气,那么这可能是模拟器和设备之间根本不一样的众多事情之一,您将拥有在设备上测试应用程序的这一部分。

于 2009-08-21T21:28:41.633 回答
0

应用配置后关闭并重新打开模拟器。

于 2015-04-14T11:46:15.650 回答