HttpWebRequest 是 .net 基类库中的一个类,在命名空间 System.Net 下面,用来使用户通过 HTTP 协议和服务器交互。

HttpWebRequest  对 HTTP 协议进行了完整的封装,对 HTTP 协议中的 Header,  Content, Cookie 都做了属性和方法的支持,很容易就能编写出一个模拟浏览器自动登录的程序。

程序使用 HTTP 协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成,下面对这两种方式进行一下说明:

1.  GET 方式。 GET 方式通过在网络地址附加参数来完成数据的提交,比如在地址 http: //www.google.com/webhp?hl=zh-CN 中,前面部分 http: //www.google.com/webhp 表示数据提交的网址,后面部分 hl=zh-CN 表示附加的参数,其中  hl 表示一个键(key), zh-CN 表示这个键对应的值(value)。程序代码如下:

HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.google.com/webhp?hl=zh-CN" );
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
   //在这里对接收到的页面内容进行处理
}

2.  POST 方式。 POST 方式通过在页面内容中填写参数的方法来完成数据的提交,参数的格式和  GET 方式一样,是类似于 hl=zh-CN&newwindow=1 这样的结构。程序代码如下:

string param = "hl=zh-CN&newwindow=1";
byte[] bs = Encoding.ASCII.GetBytes(param);

HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.google.com/intl/zh-CN/" );
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bs.Length;

using (Stream reqStream = req.GetRequestStream())
{
   reqStream.Write(bs, 0, bs.Length);
}
using (WebResponse wr = req.GetResponse())
{
   //在这里对接收到的页面内容进行处理
}

在 上面的代码中,我们访问了 www.google.com 的网址,分别以 GET 和  POST 方式提交了数据,并接收了返回的页面内容。然而,如果提交的参数中含有中文,那么这样的处理是不够的,需要对其进行编码,让对方网站 能够识别。

3. 使用 GET 方式提交中文数据。 GET 方式通过 在网络地址中附加参数来完成数据提交,对于中文的编码,常用的有 gb2312 和 utf8 两种,用  gb2312 方式编码访问的程序代码如下:

Encoding myEncoding = Encoding.GetEncoding("gb2312");
string  address = "http://www.baidu.com/s?" + HttpUtility.UrlEncode ("参数一", myEncoding) + "=" +  HttpUtility.UrlEncode("值一", myEncoding);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
   //在这里对接收到的页面内容进行处理
}

在 上面的程序代码中,我们以 GET 方式访问了网址 http://www.baidu.com/s ,传递了 参数“参数一=值一”,由于无法告知对方提交数据的编码类型,所以编码方式要以对方的网站为标准。常见的网站中,  www.baidu.com (百度)的编码方式是 gb2312, www.google.com (谷歌) 的编码方式是 utf8。

4. 使用 POST 方式提交中文数据。  POST 方式通过在页面内容中填写参数的方法来完成数据的提交,由于提交的参数中可以说明使用的编码方式,所以理论上能获得更大的兼容性。用  gb2312 方式编码访问的程序代码如下:

Encoding myEncoding = Encoding.GetEncoding("gb2312");
string  param = HttpUtility.UrlEncode("参数一", myEncoding) +  "=" + HttpUtility.UrlEncode("值一", myEncoding)  + "&" + HttpUtility.UrlEncode("参数二", myEncoding)  + "=" + HttpUtility.UrlEncode("值二",  myEncoding);

byte[] postBytes = Encoding.ASCII.GetBytes(param);

HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create( "http://www.baidu.com/s" );
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
req.ContentLength = postBytes.Length;

using (Stream reqStream = req.GetRequestStream())
{
   reqStream.Write(bs, 0, bs.Length);
}
using (WebResponse wr = req.GetResponse())
{
   //在这里对接收到的页面内容进行处理
}

从 上面的代码可以看出, POST 中文数据的时候,先使用 UrlEncode 方法将中文字符转换为编码后的  ASCII 码,然后提交到服务器,提交的时候可以说明编码的方式,用来使对方服务器能够正确的解析。

以 上列出了客户端程序使用 HTTP 协议与服务器交互的情况,常用的是 GET 和  POST 方式。现在流行的 WebService 也是通过 HTTP 协议来交互的,使用的是  POST 方法。与以上稍有所不同的是, WebService 提交的数据内容和接收到的数据内容都是使用 了 XML 方式编码。所以, HttpWebRequest 也可以使用在调用  WebService 的情况下

转载于:https://www.cnblogs.com/hacker84/archive/2008/03/04/1090610.html

使用 HttpWebRequest 向网站提交数据相关推荐

  1. C#中使用 HttpWebRequest 向网站提交数据

    HttpWebRequest 是 .NET 基类库中的一个类,在命名空间 System.Net 里,用来使用户通过 HTTP 协议和服务器交互.  HttpWebRequest 对 HTTP 协议进行 ...

  2. 用代码向网站提交数据

    用代码向网站提交数据 左直拳 可以用代码模拟浏览器向网站提交数据: string sUrl = "http://....";//目标网址 Uri target = new Uri( ...

  3. 利用python的selenium模块向Plant-mPLoc提交数据

    利用python的selenium模块向Plant-mPLoc提交数据 流程一般步骤 1.对数据的预处理 2. 环境的配置 3.代码分析及流程思想 回顾和展望 流程一般步骤   首先我们对得到的序列预 ...

  4. 使用CDN加速后网站不能使用HttpWebRequest提交数据

    使用CDN加速后网站不能使用HttpWebRequest提交数据 因为CDN的安全机制,处理方法,修改服务器HOST文件,将IP直接映身到外部域名 posted on 2013-02-03 13:07 ...

  5. C# HttpWebRequest提交数据方式

    HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程 ...

  6. 【转】C# HttpWebRequest提交数据方式

    [转]C# HttpWebRequest提交数据方式 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于Sy ...

  7. html form通过ajax提交表单提交数据,Jquery通过Ajax方式来提交Form表单的具体实现

    今天刚好看到Jquery的ajax提交数据到服务器的方法,原文是: 保存数据到服务器,成功时显示信息. jQuery 代码: $.ajax({ type: "POST", url: ...

  8. 补充 宝玉 之《URL欺骗之以假乱真!》之 POST 方法提交数据 之 处理!

    补充 宝玉 之<URL欺骗之以假乱真!>之 POST 方法提交数据 之 处理! (之乎者也,怪别扭的!) 我们首先搭建一个环境: IIS 代理一下 Resin 下的 jsp 页面! (Re ...

  9. python3 requests 动态网页post提交数据_Python爬虫三:动态网页爬虫

    1. 利用API爬取数据 有时,使用BeautifulSoup解析和提取数据后,输出结果为空.这是由于网页使用了另一种加载数据的方式--通过API加载数据.API(Application Progra ...

最新文章

  1. vue 手写一个时间选择器
  2. Shell中的数据重定向--输入/输出重定向
  3. mysql 5.5.安装包_Mysql的详细安装教程!亲测可用!!!
  4. 嵌入式NVR发展浅析
  5. 写一个易于维护使用方便性能可靠的Hybrid框架(一)—— 思路构建
  6. GoogleNet_V3实验
  7. 前后端分离导出excel_Vue + .NetCore前后端分离的快速发开框架
  8. C/C++创建服务器和客户端的demo
  9. Xilinx XC7Z020双核ARM+FPGA开发板试用
  10. 出没干日月鸿蒙之内翻译,李白《大鹏遇希有鸟赋》原文及翻译赏析
  11. mysql ndb集群_mysql的ndb集群
  12. uestc 1593 老司机破阵(线段树 or multiset)
  13. 51单片机使用12M晶振串口乱码问题
  14. GIC检测中断的流程
  15. bash install.sh ********错误
  16. 页面验证是否是真实有效的身份证号码
  17. qbo_listen编译问题
  18. python 从源码讲解random模块
  19. Android Studio的省电模式
  20. 说太多都是话痨,上才艺——PostMan接口自动化测试(一)

热门文章

  1. 如何QLayout内部的成员部件之间从左到右依次排列
  2. Ubuntu20.04安裝QQ for Linux
  3. [C/C++] constexpr函数
  4. 字符串中最后一个单词长度
  5. 关于优酷开放SDK中setOnRealVideoStartListener
  6. Android.mk文件的解析
  7. linux脚本提示,linux开机提示信息脚本
  8. ORA-01855: AM/A.M. or PM/P.M. required问题排查与解析
  9. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
  10. linux可执行文件格式