2

わかりましたので、私が読んだすべての場所と私が話したすべての人は、非同期モードで使用される場合、NSURLConnection は OSX のシステム プロキシ設定を自動的に使用する必要があると言っています。

これが私がやったことです:

  1. 基本認証を使用して、ポート 8080 経由で別のホストに squid プロキシをセットアップします。
  2. Mac のシステム プロキシ設定でこのプロキシをセットアップします。
  3. 非同期通信の必要に応じて NSURLConnectionDelegate メソッドを処理する NSURLConnection コードをセットアップします。challengeAuthentication メソッドを含むすべてのデリゲート メソッドにブレークポイントがあります。コードが接続しようとする http アドレスは、http://api.box.comアドレスです。

結果:

  1. 私の OSX/Mac マシンのトラフィックはすべて正常にプロキシを通過し、squid のアクセス ログを介して通過していることを確認できます。
  2. 私の NSURLConnection コードは、プロキシを完全にバイパスします。私が知る限り、それは完全に無視されます。私は3つのデリゲートコールを受け取ります:
    • willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge -> チャレンジに接続された保護スペース内のホストは api.box.com (プロキシではない)
    • didReceiveResponse:(NSURLResponse *)レスポンス
    • didReceiveData:(NSData )データ
    • didFinishloading:(NSURLConnection )接続

これらはすべて api.box.com からデータを取得するのに問題なく実行されますが、プロキシのアクセス ログを参照すると、プロキシ経由でこれらの呼び出しが行われることはありません....直接のみです。

Wireshark を使用してこれを確認したところ、Mac からのほとんどすべての接続がプロキシ経由で行われていることがわかりますが、ここのコードを介して box.com への接続は確認できません。

squid と NSURLMutableRequest の両方でキャッシュしないようにキャッシュ ポリシーを設定しましたが、無駄に使用されています。

何が起こっている ?どこかで明らかにばかげたことを見逃していますか?

あなたが考えることができる助けやアイデアに感謝します。

ありがとう。

アップデート

http と https についてのコメントに興味を持ったので、https ではなく http であるランダムな URL を試してみたところ、問題なくプロキシを通過しました!!!

次に、squid のアクセス ログを調べたところ、いくつかの証明書リクエストが拒否されていることがわかりました。

1371072911.976      1 192.168.10.41 TCP_DENIED/407 3676 POST http://ocsp.digicert.com/ - HIER_NONE/- text/html
1371072911.991      1 192.168.10.41 TCP_DENIED/407 3641 GET http://crl3.digicert.com/ca3-g20.crl - HIER_NONE/- text/html
1371072912.101      1 192.168.10.41 TCP_DENIED/407 3641 GET http://crl3.digicert.com/ca3-g20.crl - HIER_NONE/- text/html
1371072912.199      1 192.168.10.41 TCP_DENIED/407 3641 GET http://crl4.digicert.com/ca3-g20.crl - HIER_NONE/- text/html
1371072912.209      1 192.168.10.41 TCP_DENIED/407 3641 GET http://crl4.digicert.com/ca3-g20.crl - HIER_NONE/- text/html
1371072912.219      1 192.168.10.41 TCP_DENIED/407 3729 GET http://crl3.digicert.com/DigiCertHighAssuranceEVRootCA.crl - HIER_NONE/- text/html
1371072912.230      1 192.168.10.41 TCP_DENIED/407 3729 GET http://crl3.digicert.com/DigiCertHighAssuranceEVRootCA.crl - HIER_NONE/- text/html
1371072912.240      1 192.168.10.41 TCP_DENIED/407 3729 GET http://crl4.digicert.com/DigiCertHighAssuranceEVRootCA.crl - HIER_NONE/- text/html
1371072912.347      1 192.168.10.41 TCP_DENIED/407 3729 GET http://crl4.digicert.com/DigiCertHighAssuranceEVRootCA.crl - HIER_NONE/- text/html

それで、おそらくhttps://api.box.comに接続しようとしているときに、証明書などへの接続に失敗していますか? たぶん、これは実際には https / squid の問題であり、NSURLConnection の問題ではありません。

4

1 に答える 1

1

したがって、問題は実際には https と http の問題のように見えました。

プロキシ経由で https リクエストを送信しようとしましたが、プロキシは http プロキシとしてのみ設定されていました。

解決?プロキシ設定で https プロキシを使用してください ;)

于 2013-06-18T23:45:14.920 に答える