尝试从我的服务器加载一些数据(xml 数据)。我通常只使用 HttpWebRequest,因为我可以将 automaticDecompression 设置为 DecompressionMethods.GZip | 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 的凭据为空。 proxy0 包含我需要的代理信息,例如代理 url、端口、用户名,但没有密码...
我用我的凭据手动创建了一个 WebProxy
WebProxy webProxy = new WebProxy(proxy0.HTTPProxy, proxy0.HTTPPort);
webProxy.Credentials = new NetworkCredential("user", "pass");
request.Proxy = webProxy;
这有效。
在 407 错误中未请求代理的用户名和密码,我不知道该怎么办...
WebClient 下载不起作用,但 UIWebView 和 MKMapView 本身会自动进行身份验证。
我缺少什么想法吗?
EDIT:
发现这个,https://bugzilla.xamarin.com/show_bug.cgi?id=1081 https://bugzilla.xamarin.com/show_bug.cgi?id=1081