我正在制作简单的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"),string>("password","thePassword") }); var result = await _clIEnt.PostAsync("auth",content); string resultContent = result.Content.ReadAsstringAsync().Result; return resultContent; }
代码有效,用户正在被授权,并且正在返回承载令牌.但是问题是,我在模拟器上的请求没有出现在Charles http流量监控列表中.
我想也许,这是因为我正在使用模拟器,但事实并非如此.我尝试打开野生动物园并浏览了一些网页,并立即出现了流量.所以问题不在于模拟器.
我也尝试在设备上安装,同样的故事,当使用httpClIEnt时,流量监控屏幕保持静音,但是一旦我打开浏览器,流量屏幕开始摇摆并篡夺所有请求.
我想可能是因为我使用httpS,尽管在任何情况下至少应该捕获请求头,即使正文被编码.但事实并非如此,我尝试在我的设备Safari上打开一些httpS站点,然后流量再次出现在我的Charles屏幕上.
我做的下一件事我下载了monotouch HttpClient sample.好消息是有几种发送请求的方法,实际上有四种 –
1. http WebRequest,
2. https WebRequest,
3. http NSUrlConnection,
4. httpClIEnt.
我尝试了所有这些,你可能会猜到前三个完全出现在查尔斯,但最后一个httpClIEnt再次我不知道为什么没有出现在交通日志屏幕上.
所以我100%确定问题是httpClIEnt类,我不知道为什么尽管它正常工作,即发送/接收请求,但是这个类的请求不能被Charles捕获.
并排除这个问题的最后一个可能原因,那可能是问题在于Charles,我也尝试在windows上使用fiddler,它在我的Mac上作为虚拟机运行(here你可以找到如何做到这一点),重复同样的故事 – 没有捕获httpClIEnt提出的所有请求,其余的(WebRequests,NSUrlConnection-s,safari网页开放)工作得很好.
请问,任何人都可以建议我,无论是某种BUG,可能有解决方法或其他解决方案.
谢谢你的回复
亲切的问候Gagik
解决方法 有很多方法可以初始化httpClIEnt.某些方法不会与 *** 作系统(完全托管)通信,也不会知道iOS代理设置.最好(对于iOS)通常使用使用CFNetwork的处理程序,有关详细信息,请参阅this blog.基本上它意味着:
var clIEnt = new httpClIEnt (CFNetworkHandler ());
否则,您需要将httpclienthandler.Proxy设置为CFNetwork.GetDefaultProxy.例如.
var handler = new httpclienthandler { Proxy = CFNetwork.GetDefaultProxy (),UseProxy = true,};var clIEnt = new httpClIEnt(handler);总结
以上是内存溢出为你收集整理的ios – 使用MonoTouch,HttpClient和Charles Proxy时的HTTP流量监控问题全部内容,希望文章能够帮你解决ios – 使用MonoTouch,HttpClient和Charles Proxy时的HTTP流量监控问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)