サーバーからデータを読み込もうとしています (xml データ)。utomaticDecompression を DecompressionMethods.GZip | に設定できるので、通常は HttpWebRequest を使用します。DecompressionMethods.Deflate を使用して、データの gzip 圧縮を自動的に使用します。
最近、あるクライアントから、自分の学校からは機能しないというメールが届きました。TestFlightApp 経由でアプリの別のコピーを彼に送信して、彼からより多くのデバッグ情報を取得すると、アプリは 407 認証エラーで応答します。それ以来、私は自分のコンピューターにプロキシを設定し、iPhone トラフィックをリダイレクトしてテストしました。
私の元の設定はそうでした、
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_url);
request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.Proxy = null;
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
WebResponse response = request.GetResponse();
などなど。
ほとんどの場合、ユーザーはプロキシの背後にいないため、Proxy を null に設定します。これにより、プロキシの解決に 1 ~ 2 秒の時間がかかります。後でこれをキャッチして HttpWebRequest を再作成するコードがありますが、デフォルトのプロキシであると思われるプロキシを無効にしないでください。どうやらそうではない...
次に、デバイスのデフォルトのプロキシ設定を取得しようとしました。
CFProxySettings proxy0 = CFNetwork.GetSystemProxySettings();
IWebProxy proxy1 = WebRequest.GetSystemWebProxy();
IWebProxy proxy2 = HttpWebRequest.DefaultWebProxy;
IWebProxy proxy3 = HttpWebRequest.GetSystemWebProxy();
IWebProxy proxy4 = CFNetwork.GetDefaultProxy();
proxy1 - proxy4 の資格情報は null です。proxy0 には、プロキシ URL、ポート、ユーザー名など、必要なプロキシ情報が含まれていますが、パスワードは含まれていません...
資格情報を使用して WebProxy を手動で作成しました
WebProxy webProxy = new WebProxy(proxy0.HTTPProxy, proxy0.HTTPPort);
webProxy.Credentials = new NetworkCredential("user", "pass");
request.Proxy = webProxy;
これは機能します。407 エラーでプロキシのユーザー名とパスワードを要求できません。どうすればよいかわかりません... WebClient のダウンロードは機能しませんが、UIWebView と MKMapView はそれ自体を自動認証します。
私が見逃しているアイデアはありますか?
編集: