我知道有很多方法可以添加类似这样的标题或Cookie。但我想要做的是在请求的顶部添加“\ 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已添加到GET请求的第一行。
这就像添加一个空行。
我怎样才能在Python中执行此操作?
我花了好几个小时讨论这个话题,却找不到任何有用的资源。
===================== ADD ========================= ===================
这是关于黑客行为。
在韩国,政府限制某些网站,但只需在请求正文的顶部添加“\ r \ n”即可轻松避免阻止用户连接到网站的过滤器。
httplib2,httplib,urllib,urllib2等..等等。
无论使用哪种库,我只需要在请求正文中添加“\ r \ n”。
答案 0 :(得分:1)
你可以通过monkeypatching httplib.HTTPConnection
类来做到这一点; urllib
,urllib2
,requests
等都使用该类来处理低级HTTP会话。
最简单的方法是修补HTTPConnection._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版本字符串结束,缓冲区仍为空。