1. 苏葳的备忘录首页
  2. 编程

C#在HttpWebRequest中增加Header

c# HttpWebRequest许多具有跨平台能力的语言的最大缺憾,是对不同操作系统下图形界面编程支持不佳。这其实也很好理解,不同系统的用户交互界面设计思想本就千差万别,指望一种语言在操作系统之上为用户提供平台间统一的UI风格确实有些难度。所以Java始终不能成为一种成功的前端开发语言(安卓算不算呢),所以至今无法放弃windows桌面上的C#语言。最近一个读取html页面的程序因为涉及用户交互,仍不得不用C#编写。

程序使用了HttpWebRequest类:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(PageUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
Encoding enc = Encoding.GetEncoding("GB2312");
StreamReader sr = new StreamReader(resStream, enc);

将获取到的内容显示出来之后(网址是http://www.163.com),发现内容比浏览器中打开的网易页面源码少很多,且其中有“因为您的ISP供应商并没有遵循标准的互联网协议,我们对您的访问作出限制,敬请谅解。您可以通过以下链接继续访问”等等字样。不明所以,所以只好假设是Request的User-Agent设置有问题。

在chrome调试中将请求的User-Agent字段拷出:

User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153

用request.header.add()方法添加,结果却报错:必须使用适当的属性或方法修改此标头。试了半天,才发现原来一些常用header已经被request固化,比如此处添加User-Agent必须要用request.UserAgent属性来设置,而只有不太常用的一些header才可用Add方法添加。

添加之后,运行通过。特此记录。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/569.html

发表评论

邮箱地址不会被公开。 必填项已用*标注