在HTTPRequest中加⼊特定的Header
要加⼊ header,需要使⽤ Request 对象:
#code1
import urllib2
request = urllib2.Request('www.baidu/')
request.add_header('User-Agent', 'fake-client')
response = urllib2.urlopen(request)
ad()
对有些 header 要特别留意,服务器会针对这些 header 做检查
User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求
Content-Type : 在使⽤ REST 接⼝时,服务器会检查该值,⽤来确定 HTTP Body 中的内容该怎样解析。常见的取值有:
application/xml :在 XML RPC,如 RESTful/SOAP 调⽤时使⽤
application/json :在 JSON RPC 调⽤时使⽤
application/x-www-form-urlencoded :浏览器提交 Web 表单时使⽤
在使⽤服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务
再给⼀个详细的:
#Code2
import urllib,urllib2
url = 'www.super-ping/ping.php?node='+node+'&le'
headers = { 'Host':'www.super-ping',
'Connection':'keep-alive',
'Cache-Control':'max-age=0',
'Accept': 'text/html, */*; q=0.01',
'X-Requested-With': 'XMLHttpRequest',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36',
'DNT':'1',
'Referer': 'www.super-ping/?le&locale=sc',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8,ja;q=0.6'
}
data = None
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
compressedData = ad()
某些⽹站反感爬⾍的到访,于是对爬⾍⼀律拒绝请求
这时候我们需要伪装成浏览器,这可以通过修改http包中的header来实现。
上⾯的例⼦⾥⾯user-agent就是伪装过的。
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36',
对付”反盗链”
某些站点有所谓的反盗链设置,其实说穿了很简单,
就是检查你发送请求的header⾥⾯,referer站点是不是他⾃⼰,
php中header是什么意思所以我们只需要像把headers的referer改成该⽹站即可,以cnbeta为例:
#Code3
headers = {
'Referer':'wwwbeta/articles'
}
headers是⼀个dict数据结构,你可以放⼊任何想要的header,来做⼀些伪装。
例如,有些⽹站喜欢读取header中的X-Forwarded-For来看看⼈家的真实IP,可以直接把X-Forwarde-For改了。
解压缩
在Code2中最后获取的数据是gzip压缩过的(在这个样例中返回的数据是服务器决定的),可以写进⽂件查看,对其进⾏解压缩:
#Code4
import gzip,StringIO
compressedData = ad()
compressedStream=StringIO.StringIO(compressedData)
gzipper=gzip.GzipFile(fileobj=compressedStream)
ad()
这⾥写的⽐较全
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论