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开发人员,也要明白,不能相信客户端发送来的数据总是合法的,也不能以为他人只能通过浏览器来访问网站,上面就是个例子
而作为防范,验证码之类的可以防范大部分人了~只是,也别以为有了验证码就能防住所有人了,欲知后事如何,请听下回分解~
HttpWebRequest以及HttpWebResponse的更多相关文章
- C# HttpWebRequest与HttpWebResponse详解
C# HttpWebRequest与HttpWebResponse详解 http://www.codeproject.com/Articles/6554/How-to-use-HttpWebRequ ...
- 使用HttpWebRequest以及HttpWebResponse读取Http远程文件
主页>杂项技术>.NET(C#)> 使用HttpWebRequest以及HttpWebResponse读取Http远程文件 jackyhwei 发布于 2010-08-15 21: ...
- HttpWebRequest和HttpWebResponse用法小结
http://www.cnblogs.com/willpan/archive/2011/09/26/2176475.html http://www.cnblogs.com/lip0121/p/4539 ...
- 利用HttpWebRequest和HttpWebResponse获取Cookie
之前看过某个同学的一篇有关与使用JSoup解析学校图书馆的文章,仔细一看,发现竟然是同校!!既然对方用的是java,那么我也就来个C#好了,虽然我的入门语言是java. C#没有JSoup这样方便的东 ...
- c# HttpWebRequest与HttpWebResponse 绝技(转载)
c# HttpWebRequest与HttpWebResponse 绝技 如果你想做一些,抓取,或者是自动获取的功能,那么就跟我一起来学习一下Http请求吧.本文章会对Http请求时的Get和P ...
- C#模拟POST提交表单(二)--HttpWebRequest以及HttpWebResponse
上次介绍了用WebClient的方式提交POST请求,这次,我继续来介绍用其它一种方式 HttpWebRequest以及HttpWebResponse 自认为与上次介绍的WebClient最大的不同之 ...
- C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站
原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...
- 利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录
利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录 tring cookie = response.Headers.Get("Set-Cookie ...
- C# -- HttpWebRequest 和 HttpWebResponse 的使用
C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebRequest 和 HttpWebResponse,来判断一个网页地址是否可以正常访问. 1 ...
- C#使用HttpWebRequest和HttpWebResponse上传文件示例
C#使用HttpWebRequest和HttpWebResponse上传文件示例 1.HttpHelper类: 复制内容到剪贴板程序代码 using System;using System.Colle ...
随机推荐
- Run-time Settings--General--Run Logic
LR单用户,重复操作日志 案例:假如你想在一个脚本中,实现登录执行1次,查询执行2次,插入执行3次,怎么办?录3个脚本?每个事务分别在脚本中复制N次? 当然不用,LR早就想到了你的需求,下面让我们隆重 ...
- Ural 1960 Palindromes and Super Abilities
Palindromes and Super Abilities Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged ...
- 【贪心】codeforces D. Minimum number of steps
http://codeforces.com/contest/805/problem/D [思路] 要使最后的字符串不出现ab字样,贪心的从后面开始更换ab为bba,并且字符串以"abbbb. ...
- poj1975
#include<stdio.h> #include<string.h> #define N 100 int map[N][N]; int main() { int t,n,m ...
- ES6__字符串、数组、对象的扩展
/** * 字符串的扩展 */ // 模板字符串 tab上面的反向符号 // 添加${} // let flag = true; // // let html = `<ul> // < ...
- 转 蓝桥杯 历届试题 波动数列 [ dp ]
传送门 历届试题 波动数列 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 观察这个数列: 1 3 0 2 -1 1 -2 ... 这个 ...
- msp430项目编程02
msp430中项目---液晶1602显示 1.液晶1602工作原理 2.电路原理说明 3.代码(静态显示) 4.代码(动态显示) 5.项目总结 msp430项目编程 msp430入门学习
- PAT (Advanced Level) 1036. Boys vs Girls (25)
简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...
- Codechef-ANCESTOR(树套树/CDQ分治)
题意: 给定两棵有根树,各有 N 个点.两棵树上的点分别被从 1 到 N 标号.两棵树的根均为标号为 1 的节点. 你的任务非常简单:对于每个 i,找到一个 j(j != i),使得在两棵树中 j 都 ...
- 在EasyUI的DataGrid中嵌入Combobox
在做项目时,须要在EasyUI的DataGrid中嵌入Combobox,花了好几天功夫,在大家的帮助下,最终看到了它的庐山真面: 核心代码例如以下: <html> <head> ...