http请求(Python爬虫headers)

来源:互联网 发布:制药工程就业前景知乎 编辑:程序博客网 时间:2024/05/22 05:16
在http请求中,第一行必须是一个请求行,用来说明请求类型,要访问的资源,以及使用的HTTP版本;
然后是一个首部(header)小节,用来说明服务器要使用的附加信息。
<重要>:在首部之后是一个空行,在此之后可以添加任意的其他数据(也叫作主体(body))
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
请求行的第一部分说明了请求是GET请求,GET后面的/说明请求的是该域名的根目录。
该行的最后一部分说明使用的是HTTP1.1版本。
第二行请求的第一个首部:HOST,作用是指出请求的目的地。结合第一行的/可以告诉服务器请求的是:
www.baidu.com/;
(HTTP 1.1才需要使用首部HOST,而原来的1.0版本则不需要使用)。第三行中包含的是首部User-Agent,
服务器端和客户端脚本都能够访问它,它是浏览器类型检测逻辑的重要基础。该信息由你使用的浏览器来定义
(在本例中是Firefox 1.0.1),并且在每个请求中将自动发送。最后一行是首部Connection,通常将浏
览器操作设置为Keep-Alive(当然也可以设置为其他值)。注意,在最后一个首部之后有一个空行。即使不
存在请求主体,这个空行也是必需的。
GET /books/?name=Professional%20Ajax HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
注意,为了将文本“Professional Ajax”作为URL的参数,需要编码处理其内容,将空格替换成%20,这称
为URL编码(URL encoding),常用于HTTP的许多地方(JavaScript提供了内建的函数来处理URL编码和
解码)。“名称—值”(name—value)对用 & 隔开。绝大部分的服务器端技术能够自动对请求主体进行解码,
并为这些值的访问提供一些逻辑方式。当然,如何使用这些数据还是由服务器决定的。
以下就是一个典型的POST请求:
POST / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
从上面可以发现, POST请求和GET请求之间有一些区别。首先,请求行开始处的GET改为了POST,以表示不同
的请求类型。你会发现首部Host和User-Agent仍然存在,在后面有两个新行。其中首部Content-Type说明
了请求主体的内容是如何编码的。浏览器始终以application/ x-www-form- urlencoded的格式编码来传
送数据,这是针对简单URL编码的MIME类型。首部Content-Length说明了请求主体的字节数。在首部Connec
tion后是一个空行,再后面就是请求主体。与大多数浏览器的POST请求一样,这是以简单的“名称—值”对的形式
给出的,其中name是Professional Ajax,publisher是Wiley。你可以以同样的格式来组织URL的查询字
符串参数。
0 0