我是 HttpClient 类的新手,我在使用Charles Proxy监控请求时遇到问题。基本上我需要监控从模拟器或实际 iOS 设备发出的请求。在这里,您可以找到有关如何为 iOS 开发配置 Charles 的精彩教程。例如,我正在发出简单的 HttpClient 请求,只是一个简单的授权
async Task<string> authorizeUser()
{
HttpClient _client = new HttpClient ();
_client.BaseAddress = new Uri("https://...../api/");
_client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue ("bearer", token);
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("username", "theUserName"),
new KeyValuePair<string, string>("password", "thePassword")
});
var result = await _client.PostAsync("auth", content);
string resultContent = result.Content.ReadAsStringAsync().Result;
return resultContent;
}
代码有效,用户被授权,并且不记名令牌被返回。但是问题是什么,我在模拟器上的请求没有出现在 Charles http 流量监控列表中。
我想也许是因为我使用的是模拟器,但事实并非如此。我尝试打开 safari 并浏览了一些网页,流量立即出现。所以问题不在于模拟器。
我也尝试在设备上安装,同样的故事,当使用 HttpClient 时,流量监控屏幕保持沉默,但只要我打开浏览器,流量屏幕就会开始抖动并篡夺所有请求。
我想可能是因为我使用 HTTPS,尽管在任何情况下至少应该捕获请求标头,即使正文是编码的。但事实并非如此,我尝试在我的设备 safari 上打开一些 HTTPS 站点,流量再次出现在我的 Charles 屏幕上。
接下来我下载了 monotouch HttpClient 示例。好消息是有几种发送请求的方法,实际上有四种——1. http WebRequest,2. https WebRequest,3. http NSUrlConnection,4. HttpClient。
我都试过了,你可能猜到前三个完美地出现在 charles 中,但最后一个 HttpClient 再次我不知道为什么没有出现在流量日志屏幕中。
所以我 100% 确定问题出在 HttpClient 类,我不知道为什么尽管它工作正常,即发送/接收请求,但 Charles 无法捕获此类发出的请求.
并排除此问题的最后一个可能原因,即问题可能出在 Charles 中,我还尝试在 Windows 上使用 Fiddler,它在我的 Mac 上作为虚拟机运行(在这里你可以找到如何做到这一点),重复了同样的故事 - HttpClient 发出的所有请求都没有被捕获,其余的(WebRequests、NSUrlConnection-s、safari 网页打开)工作得很好。
请,任何人都可以建议我,无论是某种错误,可能有解决这个问题的方法或其他解决方案。
谢谢大家的回复
亲切的问候 Gagik