|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。Web可以打下世界,最主要的元勋就是HTTP;HTTP可以立功立业,最主要的缘故原由就是它的复杂。
微软在.NETFramework4.5中为人人带来了System.Net.Http.HttpClient,既然叫HttpClient,我想应当投合了HTTP复杂的特征,应当会比HttpWebRequest更复杂。
在之前的博文“jQuery能做到,PHP能做到,C#也能做到”中也切实其实发明用HttpClient倡议HTTPPOST哀求并传送urlquerystring参数,比用HttpWebRequest更复杂。因而盘算把基于HttpWebRequest的完成改成基于HttpClient的完成。
基于HttpWebRequest的完成中有设置UserAgent的代码:
- varwebRequest=WebRequest.Create(url)asHttpWebRequest;webRequest.UserAgent="CNBlogs";
复制代码 原本觉得HttpClient也有一样的UserAgent属性,因而想如许写:
- varhttpClient=newHttpClient();httpClient.UserAgent="CNBlogs";//毛病的代码
复制代码 了局发明HttpClient基本没有UserAgent这个属性。
因而,找啊找,终究找到了一个UserAgent:
- varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.UserAgent
复制代码 觉得就是它了,却发明这里的UserAgent是只读属性。
再一看它的范例是HttpHeaderValueCollection<ProductInfoHeaderValue>,能够Add,Add的参数范例是ProductInfoHeaderValue,因而newProductInfoHeaderValue,机关函数的参数范例是ProductHeaderValue,因而newProductHeaderValue。代码以下:
- varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.UserAgent.Add(newProductInfoHeaderValue(newProductHeaderValue("CNBlogs")));
复制代码 运转代码一看,切实其实失掉了想要的UserAgent。顺藤摸瓜终究摸到了,但有些庞大。
换了根藤摸,摸到了一个略微复杂些的瓜,如许也能够:
- varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.UserAgent.Add(newProductInfoHeaderValue("CNBlogs",null));
复制代码 依据实践需求,必要在UserAgent中设置邮件地点,因而代码改成:
- varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.UserAgent.Add(newProductInfoHeaderValue(newProductHeaderValue("contact@cnblogs.com")));
复制代码 运转了局居然报错:failed:System.FormatException:Theformatofvaluecontact@cnblogs.comisinvalid.
atSystem.Net.Http.Headers.HeaderUtilities.CheckValidToken(Stringvalue,StringparameterName)
atSystem.Net.Http.Headers.ProductHeaderValue..ctor(Stringname) 而在HttpWebRequest中是能够的:
- varwebRequest=WebRequest.Create(url)asHttpWebRequest;webRequest.UserAgent="contact@cnblogs.com";
复制代码 摸了半天,本来摸到的是半生不熟的瓜。。。
算了,仍是乞助摸瓜妙手Google吧。。。找到了HowtouseHttpClienthandlers中的一行代码:
- httpClient.DefaultRequestHeaders.Add("user-agent","...");
复制代码 妙手一脱手,就知有无,改成这个代码就可以弄定:
- varhttpClient=newHttpClient();httpClient.DefaultRequestHeaders.Add("UserAgent","contact@cnblogs.com");
复制代码 这个应当是HtppClient中设置UserAgent最复杂的办法,HttpWebRequest的对应完成是:
- varwebRequest=WebRequest.Create(url)asHttpWebRequest;webRequest.Headers.Add("UserAgent","contact@cnblogs.com");
复制代码 弄定是弄定了,原觉得HttpClient会比HttpWebRequest更复杂。但是如今设置UserAgent这么复杂的操纵,利用HttpWebRequest信手拈来,只需输出“.u”,智能感知就可以找到;利用HttpClient反而有些贫苦,不但没有智能感知,并且要手动输出字符串"UserAgent"。
我想尽年夜多半人利用HttpClient设置UserAgent时,起首想到的是HttpClient.UserAgent。优异的计划应当是用户想到那里,它就呈现在那里。而不“复杂”的HttpClient却要和用户捉迷躲。
HttpClient与HttpWebRequest事实有甚么区分,为何要存心显得与HttpWebRequest纷歧样?
MSDN上是这么说:Bydefault,HttpWebRequestwillbeusedtosendrequeststotheserver.
IfanappusingHttpClientandrelatedclassesintheSystem.Net.Httpnamespaceintendstodownloadlargeamountsofdata(50megabytesormore). 仅仅由于呼应哀求的数据量年夜,HttpClient就与HttpWebRequest不同云云年夜,这是站不住脚的来由。
厥后在HenriksBlog中找到如许一句话:ThedefaultHttpClientisthesimplestwayinwhichyoucanstartsendingrequests.AsingleHttpClientcanbeusedtosendasmanyHTTPrequestsasyouwantconcurrentlysoinmanyscenariosyoucanjustcreateoneHttpClientandthenusethatforallyourrequests. 本来谜底在这里!HttpClient最不同凡响的中央是统一个HttpClient实例能够收回屡次哀求,每次哀求是能够是完整分歧的URL。而一个HttpWebRequest实例对应于一个Url的一次哀求。这才是HttpClient与HttpWebRequest的最年夜区分地点。
原本写这篇博客是想品评HttpClient,写的过程当中才发明本来是本人对HttpClient不敷懂得。可是仍然以品评扫尾,HttpClient计划得不敷复杂。
就安全性而言,net网页编程已经远远低于VB.NET,更无法与安全性著称的C#相比。 |
|