Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中操作GET请求的内容体_Python_Http_Request_Urllib2 - Fatal编程技术网

如何在Python中操作GET请求的内容体

如何在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

我知道有很多方法可以添加像这样的标题或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-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来做。