インターネットに小さな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);
しかし、喜びはありません。
考え?
これを閉じるには。これはiOS4SDKで修正されているようです。シミュレーターのネットワークスタックは、HTTP呼び出しにMacのプロキシを使用します。
あなたが試すことができます:
「システム環境設定」->「ネットワーク」->ネットワークデバイスを選択->「詳細」->「プロキシ」
プロキシを使用してみることができます: http://www.proxifier.com/mac/ これにより、任意のプログラムにプロキシを設定できます。
あなたが尋ねたことではありませんが、それはあなたの問題を解決するはずです。
XCode 4.0(4A304a)がこれを再び壊したようです。 Burpを介してhttp呼び出しをプロキシするようにスタックを設定すると、シミュレーター以外のすべてのアプリ(Safariなど)で正常に動作します。
IPhoneシミュレータを再起動するだけです。
このために私は次のトリックを使用します
設定に移動>>一般>>アクセシビリティ>>スイッチを入れる太字>>ピッカービューを開き、再起動を要求して有効にする>>続行を押す>> iPhoneシミュレーターを再起動する
ポップアップは、プロキシのユーザー名とパスワードを要求します。
この質問は少し古いですが、参考のために私の調査結果を追加すると思いました。少なくともiOS4.x SDKでは、次のコードはシミュレーターとiPhoneの両方で機能します。
CFDictionaryRef systemProxyDict = CFNetworkCopySystemProxySettings();
CFReadStreamSetProperty(m_resultRef, kCFStreamPropertyHTTPProxy, systemProxyDict);
シミュレータはおそらくプロキシを使用できません。 Mac OS Xが提供する標準のネットワークスタックを使用しており、thatがプロキシを使用しています。
シミュレーターの使用中に定数がコメント化されていて、運が悪かったのでハードコーディングしようとした場合、これはおそらくシミュレーターとデバイス間で同じではない多くのことの1つであり、次のようになります。アプリケーションのこの部分をデバイスでテストします。
構成を適用した後、シミュレーターを閉じて再度開きます。