`
water84222
  • 浏览: 372843 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

使用httpwebrequest发送数据到网站

阅读更多
怎样通过HttpWebRequest 发送 POST 请求到一个网页服务器?例如编写个程序实现自动用户登录,自动提交表单数据到网站等。
假如某个页面有个如下的表单(Form):
<form name="form1" action="http://www.here.com/login.asp" method="post">
  <input type="text" name="userid" value="">
  <input type="password" name="password" value="">
</form>
    
从表单可看到表单有两个表单域,一个是userid另一个是password,所以以POST形式提交的数据应该包含有这两项。
其中POST的数据格式为:
表单域名称1=值1&表单域名称2=值2&表单域名称3=值3……
要注意的是“值”必须是经过HTMLEncode的,即不能包含“<>=&”这些符号。

本例子要提交的数据应该是:
userid=value1&password=value2

用C#写提交程序:

  string strId = "guest";
  string strPassword= "123456";

  ASCIIEncoding encoding=new ASCIIEncoding();
  string postData="userid="+strId;
  postData += ("&password="+strPassword);

  byte[] data = encoding.GetBytes(postData);

  // Prepare web request...
  HttpWebRequest myRequest =
   (HttpWebRequest)WebRequest.Create("http://www.here.com/login.asp");

  myRequest.Method = "POST";
  myRequest.ContentType="application/x-www-form-urlencoded";
  myRequest.ContentLength = data.Length;
  Stream newStream=myRequest.GetRequestStream();

  // Send the data.
  newStream.Write(data,0,data.Length);
  newStream.Close();

  // Get response
  HttpWebResponse myResponse=(HttpWebResponse)myRequest.GetResponse();
  StreamReader reader = new StreamReader(response.GetResponseStream(),Encoding.Default);
  string content = reader.ReadToEnd();
  Console.WriteLine(content);
 
 

 使用Visual Sniffer :

这里介绍个工具: Visual Sniffer , google 一下便可轻松找到下载地址。
可以使用 Visual Sniffer 来捕捉提交的数据信息:
1. 访问你需要站外提交的页面,比如 CSDN 登陆页 http://www.csdn.net/member/UserLogin.aspx
2. 填写好需要的资料,比如用户名和密码,
3. 打开 Visual Sniffer, 点“开始拦截”
4. 在访问的页面中提交。
5. 等提交成功之后,在 Visual Sniffer 中“停止拦截”
6. 在 Visual Sniffer 的左侧栏的加号中依次点开,右边是它拦截到的内容,
   找到 内容含有 POST  http://www.csdn.net/member/UserLogin.aspx  的节点
以下是我拦截的内容供参考:

POST http://www.csdn.net/member/UserLogin.aspx HTTP/1.0
Accept: image/gif
, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Referer: http://www.csdn.net/member/UserLogin.aspx
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Pragma: no-cache
User-Agent: Mozilla/
4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1)
Host: www.csdn.net
Content-Length: 
355
Proxy-Connection: Keep-Alive
Cookie: ASPSESSIONIDAAAATBQC
=FMEGGCKDBKHAMMCGKPFDMBFG; ASP.NET_SessionId=lusprmnom05lr445tmteaf55; userid=699879

__EVENTTARGET
=&__EVENTARGUMENT=&__VIEWSTATE=dDwtMTcwMzgxNjQ2Mjs7bDxDU0ROVXNlckxvZ2luOmNiX1NhdmVTdGF0ZTtDU0ROVXNlckxvZ2luOkltYWdlX0xvZ2luOz4%2Btu1q2wmRZoAJTi9L73w1zBleylY%3D&CSDNUserLogin%3Atb_UserName=testusername&CSDNUserLogin%3Atb_Password=testpassword&CSDNUserLogin%3Atb_ExPwd=9232&from=&CSDNUserLogin%3AImage_Login.x=36&CSDNUserLogin%3AImage_Login.y=6
GET http://www.csdn.net/mycustompage.htm?aspxerrorpath
=/member/UserLogin.aspx HTTP/1.0
Accept: image/gif
, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Referer: http://www.csdn.net/member/UserLogin.aspx
Accept-Language: zh-cn
UA-CPU: x86
Pragma: no-cache
User-Agent: Mozilla/
4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1)
Host: www.csdn.net
Proxy-Connection: Keep-Alive
Cookie: ASPSESSIONIDAAAATBQC
=FMEGGCKDBKHAMMCGKPFDMBFG; ASP.NET_SessionId=lusprmnom05lr445tmteaf55; userid=699879

注意:PostData 参数之间是以 " & " 进行 连接的

OK,通过以上简单示例,只要稍微修改下,即可做成多站点自动登陆,或自动网上投票等功能!

such as:

代码如下:

            ASCIIEncoding encoding=new ASCIIEncoding();
            
string postData="TextBox1=33&Button1=Button";
            
byte[]  data = encoding.GetBytes(postData);

            
// Prepare web request
            HttpWebRequest myRequest =
                (HttpWebRequest)WebRequest.Create(
"http://localhost/testform1.aspx");
            myRequest.Method 
= "POST";
            myRequest.ContentType
="application/x-www-form-urlencoded";
            myRequest.ContentLength 
= data.Length;
            Stream newStream
=myRequest.GetRequestStream();
            
// Send the data.
            newStream.Write(data,0,data.Length);
            newStream.Close();


解释:
postData 为你要提交的数据
比如 CSDN 的登录页面 http://www.csdn.net/member/UserLogin.aspx
输入用户名密码和校验码,并提交之后,浏览器便将下面的数据提交到服务器:
 

 

CSDNUserLogin%3Atb_UserName=yourName&CSDNUserLogin%3Atb_Password=yourPassword&CSDNUserLogin%3Atb_ExPwd=2332


其中的 yourName 为你实际登陆时提交的用户名, yourPassword 即为你的密码, 2332 是我刚才登陆时的验证码

参考网址:

http://dev.csdn.net/article/28/28374.shtm
http://www.knowsky.com/18774.html
http://www.netomatix.com/HttpPostData.aspx

分享到:
评论

相关推荐

    使用HttpWebRequest发送自定义POST请求

    ### 使用HttpWebRequest发送自定义POST请求的详细解析 在日常的网络交互中,当我们通过浏览器访问网页并提交表单时,实际上是向服务器发送了一个POST请求。对于开发人员而言,掌握如何在自己的C#应用程序中模拟这一...

    C#实现通过HttpWebRequest发送POST请求实现网站自动登陆

    ### C#实现通过HttpWebRequest发送POST请求实现网站自动登陆 #### 概述 在Web开发领域,有时我们需要实现一些自动化操作,比如模拟用户登录过程、提交表单数据等。使用C#语言结合`HttpWebRequest`类可以轻松实现这...

    使用HttpWebRequest提交数据

    4. **发送数据**:通过`GetRequestStream`方法获取流对象,并将数据写入该流。 5. **获取响应**:调用`GetResponse`方法获取响应。 **示例代码**: ```csharp string postData = "query=关键词&language=zh-CN"; ...

    C#在WinForm下使用HttpWebRequest上传文件并显示进度

    在文件上传场景中,我们通常会使用POST方法来发送文件数据到服务器。下面是一个基本的步骤概述: 1. **创建HttpWebRequest对象**:通过`WebRequest.Create()`方法创建一个指向服务器URL的HttpWebRequest实例。 ```...

    asp.net 服务端代码以 xml utf-8的格式向指定地址post 数据并接收返回值 HttpWebRequest

    本教程将深入探讨如何使用`HttpWebRequest`类以XML UTF-8格式发送数据到指定地址,并接收返回值。首先,我们需要理解`HttpWebRequest`类在.NET框架中的作用。 `HttpWebRequest`是System.Net命名空间中的一个类,它...

    使用HttpWebRequest实现大文件上传

    这包括设置`HttpWebRequest`的相关参数、读取文件并发送数据等。 3. **错误处理**:在整个过程中应充分考虑可能出现的各种异常情况,并妥善处理。例如,网络中断、服务器响应异常等。 4. **进度显示与控制**:在上...

    C#使用HttpWebRequest自动更新客户端应用程序

    - 文件下载:使用HttpWebRequest创建请求,设置请求头,监听数据流以实现下载,并通过回调或事件报告下载进度。 - 错误处理:捕获并处理可能出现的网络错误,如超时、连接失败等。 - 安全性:在替换旧文件时,应...

    使用HttpWebRequest实现大文件上最新传

    `WebClient`在上传文件时的工作原理是将文件内容完全读入内存,再以数据流的形式发送到服务器。这种机制对于小文件来说效率较高,但对于大文件则可能导致内存消耗过大,尤其是在资源有限的情况下容易触发`...

    利用HttpWebRequest+HtmlAgilityPack进行数据采集

    通过学习和实践这个例子,开发者可以掌握如何在.NET环境中进行基本的Web抓取,为进一步的数据分析、网站自动化或其他相关任务打下基础。同时,理解如何处理网络请求的异常和错误,以及如何优雅地处理HTML解析的不...

    C#中HttpWebRequest、WebClient、HttpClient的使用详解

    HttpWebRequest: 命名空间: System.Net,这是.NET创建者...HttpWebRequest通常和WebResponse一起使用,一个发送请求,一个获取数据。HttpWebRquest更为底层一些,能够对整个访问过程有个直观的认识,但同时也更加复

    HttpWebRequest详解

    以下是一个简单的示例代码,演示了如何使用`HttpWebRequest`发送一个GET请求并读取响应: ```csharp using System.Net; using System.IO; // 创建HttpWebRequest对象 HttpWebRequest request = (HttpWebRequest)...

    .net 通过程序向网站发送数据获取数据

    通过以上分析,我们可以清楚地了解到如何使用`.NET`框架中的`HttpWebRequest`类向网站发送数据并获取响应。这对于实现诸如调用API、发送短信等场景非常有用。需要注意的是,实际开发中还需要对代码进行优化和完善,...

    HttpWebRequest

    通过`HttpWebRequest`,开发者能够直接与HTTP和HTTPS服务器交互,发送各种类型的请求并处理响应数据,包括文本、图像等。熟练掌握`HttpWebRequest`的使用,对于构建网络应用程序和Web服务至关重要。在实际开发中,...

    Asp.Net使用HttpWebRequest跨域上传

    这是浏览器为了保护用户安全而设置的一种机制,不允许脚本从不同的源获取或发送数据。然而,为了支持跨域通信,Web API和Web应用通常会采用CORS(Cross-Origin Resource Sharing)策略,这是一种允许服务器指定哪些...

    c# httpwebrequest调用webservice demo

    在C#开发中,有时候我们需要与WebService进行交互,获取或发送数据。本篇文章将详细介绍如何利用`HttpWebRequest`类来实现这一功能,并通过示例代码帮助理解具体的实现步骤。 #### 一、基础知识介绍 在深入了解...

    C#基于HttpWebRequest实现发送HTTP请求的方法分析

    POST请求用于向服务器发送数据,常用于提交表单或上传数据。以下是如何使用`HttpWebRequest`发送POST请求的示例: ```csharp public static string HttpPost(string url, string data) { byte[] bs = Encoding.UTF...

    C#中HttpWebRequest介绍

    3. **发送请求并获取响应**:调用`GetResponse`方法发送请求,并从返回的对象中读取响应数据。 ### GET请求示例 当需要从远程服务器获取资源时,通常会使用GET请求。下面是一个简单的GET请求实现: ```csharp ...

    火车头7.6版采集https插件:网站报错System.Net.HttpWebRequest问题解决方案

    总之,"火车头7.6版采集https插件:网站报错System.Net.HttpWebRequest问题解决方案"涉及到的是火车头在进行HTTPS抓取时遇到的网络请求错误,通过特定的插件(https.dll)和相应的使用说明可以解决这一问题。在使用...

    .net模拟登录博客园,使用httpWebRequest登录并发布随笔文章

    首先,我们需要理解HTTP请求的基本原理,然后了解博客园登录页面的相关表单数据,最后使用.NET的`HttpWebRequest`来构建和发送这些请求。 一、HTTP请求基础知识 HTTP(超文本传输协议)是互联网上应用最广泛的一种...

    c#post multipart/form-data和JSON数据

    当涉及到网络通信,比如发送数据到服务器,C#提供了多种方式,其中包括POST请求。本篇文章将详细探讨如何在C#中处理`multipart/form-data`和JSON格式的数据。 `multipart/form-data`是HTTP协议中一种用于上传文件或...

Global site tag (gtag.js) - Google Analytics