使用 HttpWebRequest 向网站提交数据
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 向网站提交数据相关推荐
- C#中使用 HttpWebRequest 向网站提交数据
HttpWebRequest 是 .NET 基类库中的一个类,在命名空间 System.Net 里,用来使用户通过 HTTP 协议和服务器交互. HttpWebRequest 对 HTTP 协议进行 ...
- 用代码向网站提交数据
用代码向网站提交数据 左直拳 可以用代码模拟浏览器向网站提交数据: string sUrl = "http://....";//目标网址 Uri target = new Uri( ...
- 利用python的selenium模块向Plant-mPLoc提交数据
利用python的selenium模块向Plant-mPLoc提交数据 流程一般步骤 1.对数据的预处理 2. 环境的配置 3.代码分析及流程思想 回顾和展望 流程一般步骤 首先我们对得到的序列预 ...
- 使用CDN加速后网站不能使用HttpWebRequest提交数据
使用CDN加速后网站不能使用HttpWebRequest提交数据 因为CDN的安全机制,处理方法,修改服务器HOST文件,将IP直接映身到外部域名 posted on 2013-02-03 13:07 ...
- C# HttpWebRequest提交数据方式
HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程 ...
- 【转】C# HttpWebRequest提交数据方式
[转]C# HttpWebRequest提交数据方式 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于Sy ...
- html form通过ajax提交表单提交数据,Jquery通过Ajax方式来提交Form表单的具体实现
今天刚好看到Jquery的ajax提交数据到服务器的方法,原文是: 保存数据到服务器,成功时显示信息. jQuery 代码: $.ajax({ type: "POST", url: ...
- 补充 宝玉 之《URL欺骗之以假乱真!》之 POST 方法提交数据 之 处理!
补充 宝玉 之<URL欺骗之以假乱真!>之 POST 方法提交数据 之 处理! (之乎者也,怪别扭的!) 我们首先搭建一个环境: IIS 代理一下 Resin 下的 jsp 页面! (Re ...
- python3 requests 动态网页post提交数据_Python爬虫三:动态网页爬虫
1. 利用API爬取数据 有时,使用BeautifulSoup解析和提取数据后,输出结果为空.这是由于网页使用了另一种加载数据的方式--通过API加载数据.API(Application Progra ...
最新文章
- vue 手写一个时间选择器
- Shell中的数据重定向--输入/输出重定向
- mysql 5.5.安装包_Mysql的详细安装教程!亲测可用!!!
- 嵌入式NVR发展浅析
- 写一个易于维护使用方便性能可靠的Hybrid框架(一)—— 思路构建
- GoogleNet_V3实验
- 前后端分离导出excel_Vue + .NetCore前后端分离的快速发开框架
- C/C++创建服务器和客户端的demo
- Xilinx XC7Z020双核ARM+FPGA开发板试用
- 出没干日月鸿蒙之内翻译,李白《大鹏遇希有鸟赋》原文及翻译赏析
- mysql ndb集群_mysql的ndb集群
- uestc 1593 老司机破阵(线段树 or multiset)
- 51单片机使用12M晶振串口乱码问题
- GIC检测中断的流程
- bash install.sh ********错误
- 页面验证是否是真实有效的身份证号码
- qbo_listen编译问题
- python 从源码讲解random模块
- Android Studio的省电模式
- 说太多都是话痨,上才艺——PostMan接口自动化测试(一)
热门文章
- 如何QLayout内部的成员部件之间从左到右依次排列
- Ubuntu20.04安裝QQ for Linux
- [C/C++] constexpr函数
- 字符串中最后一个单词长度
- 关于优酷开放SDK中setOnRealVideoStartListener
- Android.mk文件的解析
- linux脚本提示,linux开机提示信息脚本
- ORA-01855: AM/A.M. or PM/P.M. required问题排查与解析
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- linux可执行文件格式