HttpWebRequest用法
2016-06-12 18:27
477 查看
GET方法
static void Main(string[] args) { string url = "http://www.xxx.com/?param1=value1¶m2=value2"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.Headers["Accept-Language"] = "zh-Hans-CN,zh-Hans;q=0.5"; request.Headers["Accept-Encoding"] = "gzip, deflate"; /* 如果要获取Cookie CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; */ /* 获取返回的网页内容 */ { HttpWebResponse response = (HttpWebResponse)request.GetResponse(); /* 此时已通过request.GetResponse()发出请求 */ StreamReader responseStream = new StreamReader(response.GetResponseStream()); string text = responseStream.ReadToEnd(); } Console.WriteLine(text); request.Abort(); response.Close(); responseStream.Close(); }
POST方法
static void Main(string[] args) { string url = "http://www.xxx.com"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); byte[] postdata = Encoding.UTF8.GetBytes("param1=value1¶m2=value2"); request.Method = "POST"; request.Headers["Accept-Language"] = "zh-Hans-CN,zh-Hans;q=0.5"; request.Headers["Accept-Encoding"] = "gzip, deflate"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postdata.Length; /* 如果要获取Cookie CookieContainer cookieContainer = new CookieContainer(); request.CookieContainer = cookieContainer; */ /* 发送POST请 4000 求 */ Stream requestStream = request.GetRequestStream(); requestStream.Write(postdata, 0, postdata.Length); /* 此时已通过HttpWebRequest.GetRequestStream().Write(byte[] buffer, int count)方法发出请求 */ /* 获取返回的网页内容 */ HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader responseStream = new StreamReader(response.GetResponseStream()); string text = responseStream.ReadToEnd(); Console.WriteLine(text); request.Abort(); response.Close(); responseStream.Close(); }
要重复发送请求时需要再次使用
(HttpWebRequest)WebRequest.Creat(Uri),重新创建请求实现重复发送.
如果网站使用了GZIP/Deflate压缩,HttpWebRequest会自动解压缩.
使用HTTP代理
static void Main(string[] args) { string url = "http://www.xxx.com/?param1=value1¶m2=value2"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); /* 创建并设置使用代理 */ WebProxy proxy = new WebProxy("127.0.0.1", 8888); request.Proxy = proxy; /* 如果HTTP代理需要账号密码登陆 proxy.Credentials = new NetworkCredential("UserName", "PassWord"); */ /* 获取返回的网页内容 */ HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader responseStream = new StreamReader(response.GetResponseStream()); string text = responseStream.ReadToEnd(); Console.WriteLine(text); request.Abort(); response.Close(); responseStream.Close(); }
CookieContainer中Cookie跨域或丢失问题
CookieContainer中已经有所需的Cookie时,使用HttpWebRequest发送请求却没有或缺少Cookies时的两个解决方案.Here is the solution:
1. 不使用
CookieContainer.Add(Cookie)方法,只使用
CookieContainer.Add(Uri, Cookie)方法.
2. Call BugFix_CookieDomain each time you add a cookie to the container or before you use .GetCookie or before system use the container.
private void BugFix_CookieDomain(CookieContainer cookieContainer) { System.Type _ContainerType = typeof(CookieContainer); Hashtable table = (Hashtable)_ContainerType.InvokeMember("m_domainTable", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField | System.Reflection.BindingFlags.Instance, null, cookieContainer, new object[] { }); ArrayList keys = new ArrayList(table.Keys); foreach (string keyObj in keys) { string key = (keyObj as string); if (key[0] == '.') { string newKey = key.Remove(0, 1); table[newKey] = table[keyObj]; } } }
来源:http://stackoverflow.com/a/1537490/6341466
实在搞不定就把Cookie发送就把得到的Cookie转为字符串赋值到HttpWebRequest.Headers[“Cookie”]中.
相关文章推荐
- 配置内外网通信(虚拟机内网)
- memcached网络实现部分简介
- 理解LSTM网络
- Lab 8:网络LED矩阵显示器
- 深入理解 HTTP 协议 POST 与PUT 方法区别
- 机房4台服务器集群网络配置
- iOS应用架构谈 网络层设计方案
- Android下的两种http通信机制介绍
- 分布式系统和网络系统
- 网络的混杂模式
- HTTP请求头参数
- 深度卷积网络
- nginx使用SSL模块配置HTTPS支持
- 模式识别(Pattern Recognition)学习笔记(二十一)--再谈(人工)神经网络(ANN)
- Redhat 7.0使用163网易CentOS 7 的Yum 网络源
- Apache Httpd负载均衡Tomcat并实现Session Sticky和Session Cluster
- 网络端口号布局
- linux网络编程之poll
- HTTP原理
- TCP头校验和计算算法详解