在 HTTP Request 中加入特定的 Header

news/2024/7/19 9:28:22 标签: 爬虫, 数据结构与算法, php

转:http://www.findspace.name/easycoding/1137

要加入 header,需要使用 Request 对象:

#code1
import urllib2
request = urllib2.Request('http://www.baidu.com/')
request.add_header('User-Agent', 'fake-client')
response = urllib2.urlopen(request)
print response.read()

对有些 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 = 'http://www.super-ping.com/ping.php?node='+node+'&ping=www.google.com'
        headers = { 'Host':'www.super-ping.com',
                    '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': 'http://www.super-ping.com/?ping=www.google.com&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 = response.read()

某些网站反感爬虫的到访,于是对爬虫一律拒绝请求
这时候我们需要伪装成浏览器,这可以通过修改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站点是不是他自己,
所以我们只需要像把headers的referer改成该网站即可,以cnbeta为例:

#Code3
headers = {
    'Referer':'http://www.cnbeta.com/articles'
}

headers是一个dict数据结构,你可以放入任何想要的header,来做一些伪装。
例如,有些网站喜欢读取header中的X-Forwarded-For来看看人家的真实IP,可以直接把X-Forwarde-For改了。

解压缩

在Code2中最后获取的数据是gzip压缩过的(在这个样例中返回的数据是服务器决定的),可以写进文件查看,对其进行解压缩:

#Code4
import gzip,StringIO

compressedData = response.read()
        compressedStream=StringIO.StringIO(compressedData)
        gzipper=gzip.GzipFile(fileobj=compressedStream)
        data=gzipper.read()

 

这里写的比较全

http://blog.csdn.net/pleasecallmewhy/article/details/8925978

转载于:https://www.cnblogs.com/menkeyi/p/5993386.html


http://www.niftyadmin.cn/n/933423.html

相关文章

【云栖大会】百花齐放的开源框架与前端

2016杭州云栖大会在云栖小镇召开,本届大会以“飞天・进化”为主题,内容规模比去年翻倍,从原本2天的议程增加至4天,从10月13日持续到16日,超过400场主题演讲使开发者们对阿里云计算生态发展和应用趋势、前沿技…

python中判断语句例题_第二个月课堂005讲解python之实战 if 判断语句(课堂练习题001)...

1、讲解&#xff1a;方法一、l 0sum_o0 #存放偶数的容器sum_j0 #存放奇数的容器while l <100:if l % 20:sum_olelse:sum_jll1print(sum_o)print(sum_j)print(sum_o-sum_j)2、讲解九九乘法口诀表1、先讲解下#1.控制行for i in range(6):# 2.控制*的数量for j in range(6):if …

安卓8.0linux内核,(连载)Android 8.0 : 系统启动流程之Linux内核

这是一个连载的博文系列&#xff0c;我将持续为大家提供尽可能透彻的Android源码分析 github连载地址前言Android本质上就是一个基于Linux内核的操作系统&#xff0c;与Ubuntu Linux、Fedora Linux类似&#xff0c;我们要讲Android&#xff0c;必定先要了解一些Linux内核的知识…

汉王JAVA笔试题

汉王JAVA笔试题 1&#xff0c;jsp中动态include与静态include的区别&#xff1f; &#xff08;1&#xff09;动态包含总是会检查文件中的变化&#xff0c;适合用于包含动态页面&#xff0c;并且可以带参数。 &#xff08;2&#xff09;静态包含不会检查所含文件的变化&#xff…

/etc/security/limits.conf解释及应用

limits.conf的格式如下&#xff1a;username|groupname type resource limitusername|groupname&#xff1a;设置需要被限制的用户名&#xff0c;组名前面加和用户名区别。也可以用通配符*来做所有用户的限制。type&#xff1a;有 soft&#xff0c;hard 和 -&#xff0c;soft 指…

python3 threading.lock_python多线程threading.Lock锁用法实例

本文实例讲述了python多线程threading.Lock锁的用法实例&#xff0c;分享给大家供大家参考。具体分析如下&#xff1a;python的锁可以独立提取出来mutex threading.Lock()#锁的使用#创建锁mutex threading.Lock()#锁定mutex.acquire([timeout])#释放mutex.release()锁定方法a…

Ubuntu 上安装 Node.js

Ubuntu 上安装 Node.js Node.js 源码安装 以下部分我们将介绍在Ubuntu Linux下安装 Node.js 。 其他的Linux系统&#xff0c;如Centos等类似如下安装步骤。 在 Github 上获取 Node.js 源码&#xff1a; $ sudo git clone https://github.com/nodejs/node.git Cloning into node…

流放者柯南自建服务器 linux,流放者柯南怎么开服 个人服务器搭建方法图文教学_3DM单机...

ConanExiles搭建个人服务器教程(Windows)&#xff1a;1. 下载STEAMCMD&#xff1a;下载进入2. 解压steamcmd.zip3. 运行steamcmd.exe4. 创建一个ConanExiles文件夹来存储游戏数据. (例如 C:\Exiles)5. 在steamcmd上运行命令:steamcmd login anonymous force_install_dir C:\Exi…