如何在Python中操作GET请求的内容体
我知道有很多方法可以添加像这样的标题或cookies。但我要做的是在请求的顶部添加“\r\n”,使其看起来像下面的主体 请求正文>>如何在Python中操作GET请求的内容体,python,http,request,urllib2,Python,Http,Request,Urllib2,我知道有很多方法可以添加像这样的标题或cookies。但我要做的是在请求的顶部添加“\r\n”,使其看起来像下面的主体 请求正文>> \r\n <-- technically invisible.. GET /path/ HTTP/1.1 Host: www.website.com Connection: keep-alive Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agen
\r\n <-- technically invisible..
GET /path/ HTTP/1.1
Host: www.website.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22
Referer: https://www.google.com/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ko;q=0.6
Accept-Charset: windows-949,utf-8;q=0.7,*;q=0.3
\r\n您可以通过对httplib.HTTPConnection
类进行monkeypatch来实现这一点urllib
,urllib2
,请求
等。所有这些都使用该类来处理低级HTTP会话
最简单的方法是修补HTTPConnection.\u output()
方法,在HTTP
版本消息之前插入额外字符:
from httplib import HTTPConnection, _CS_REQ_STARTED
orig_output = HTTPConnection._output
def add_initial_newline_output(self, s):
if (self._HTTPConnection__state == _CS_REQ_STARTED and
s.endswith(self._http_vsn_str) and not self._buffer):
self._buffer.append('') # will insert extra \r\n
orig_output(self, s)
HTTPConnection._output = add_initial_newline_output
这将仅在连接处于正确状态(请求已启动)时插入额外的起始空行,该行以当前HTTP版本字符串结尾,并且缓冲区仍然为空。对不起,您在这里想做什么?您想使用urllib2
发送这样的请求,您想代理请求来更改此设置,或者完全使用其他方法?urllib2不是唯一的选择。我只想在请求正文的第一行添加“\r\n”。因此,您希望发送一个实际请求,第一行为空(这违反了HTTP规范)。不清楚,没错。它违反了HTTP规范,但大多数网站都可以处理。但过滤器不能。另一个程序员已经这样做了,所以我也想用Python来做。