C#模拟网站页面POST数据提交表单(二)--HttpWebRequest以及HttpWebResponse (转)

简介:

上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式

HttpWebRequest以及HttpWebResponse

自认为与上次介绍的WebClient最大的不同之处在于HttpWebRequest更灵活,也更强大,比如,HttpWebRequest支持Cookie,而WebClient就不支持,因此,如果要登录某个网站才能进行某些操作的时候,HttpWebResponse就派上用场了。

补充:

WebClient是可以操作Cookie的,因为 Cookie本质上就是个字符串,只要服务器返回的头是“SetCooie:xxx”,所以,按照返回的格式做下处理(不能原样返回,具体可以抓包分析下 格式),存起来,然后在HTTP请求头上加上“Cookie:xxx”即可

首先要提下Referer还有Cookie

Referer:就是一般在浏览器中发送Http请求时带的头信息,被广泛用来统计点击信息,即从那个点击而来,所以有些网站也会用这个性质来防盗链,很多时候如果什么图片仅限内部交流之类的,就是用了这个原理。

Cookie:某些网站为了辨别用户身 份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),通常大家登录的时候就要用到它,登录后,网站会储存一个Cookie的东西在 本地计算机上,然后每次访问网站时,便会把这个网站的Cookie也一并发送过去,服务器就凭借这个来确认你的身份。它是个重要信息,有些黑客也会通过盗 取Cookie的方式来侵入你的账户。


好了,现在开始具体说明:

复制代码
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("POST请求的地址");  
    request.CookieContainer = new CookieContainer();  
    CookieContainer cookie = request.CookieContainer;//如果用不到Cookie,删去即可  
    //以下是发送的http头,随便加,其中referer挺重要的,有些网站会根据这个来反盗链  
    request.Referer = “http://localhost/index.php”;  
    request.Accept = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";  
    request.Headers["Accept-Language"] = "zh-CN,zh;q=0.";  
    request.Headers["Accept-Charset"] = "GBK,utf-8;q=0.7,*;q=0.3";  
    request.UserAgent = "User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1";  
    request.KeepAlive = true;  
    //上面的http头看情况而定,但是下面俩必须加  
    request.ContentType = "application/x-www-form-urlencoded";  
    request.Method = "POST";  
      
    Encoding encoding = Encoding.UTF8;//根据网站的编码自定义  
    byte[] postData = encoding.GetBytes(postDataStr);//postDataStr即为发送的数据,格式还是和上次说的一样  
    request.ContentLength = postData.Length;  
    Stream requestStream = request.GetRequestStream();  
    requestStream.Write(postData, 0, postData.Length);  
      
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();  
    Stream responseStream = response.GetResponseStream();  
    //如果http头中接受gzip的话,这里就要判断是否为有压缩,有的话,直接解压缩即可  
    if (response.Headers["Content-Encoding"] != null && response.Headers["Content-Encoding"].ToLower().Contains("gzip"))  
    {  
        responseStream = new GZipStream(responseStream, CompressionMode.Decompress);  
    }  
      
    StreamReader streamReader = new StreamReader(responseStream, encoding);  
    string retString = streamReader.ReadToEnd();  
      
    streamReader.Close();  
    responseStream.Close();  
      
    return retString;  
复制代码

 

当然,请注意,我只是把知识与大家分享,不是让大家去做损害他人网站的事。

反过来,作为Web开发人员,也要明白,不能相信客户端发送来的数据总是合法的,也不能以为他人只能通过浏览器来访问网站,上面就是个例子

而作为防范,验证码之类的可以防范大部分人了~只是,也别以为有了验证码就能防住所有人了,欲知后事如何,请听下回分解~




本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/archive/2013/01/20/2868692.html,如需转载请自行联系原作者
相关文章
|
3月前
|
数据采集 JavaScript C#
C#图像爬虫实战:从Walmart网站下载图片
C#图像爬虫实战:从Walmart网站下载图片
|
2月前
|
SQL 缓存 分布式计算
C#如何处理上亿级数据的查询效率
C#如何处理上亿级数据的查询效率
26 1
|
2月前
|
中间件 数据库连接 API
C#数据分表核心代码
C#数据分表核心代码
41 0
|
3月前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
46 8
|
2月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
396 0
|
4月前
|
Linux C#
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
|
4月前
|
开发框架 .NET C#
WPF/C#:显示分组数据的两种方式
WPF/C#:显示分组数据的两种方式
61 0
|
4月前
|
XML C# 数据格式
WPF/C#:如何将数据分组显示
WPF/C#:如何将数据分组显示
39 0
|
25天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
31 3
|
3月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
46 2