发送没有内容长度或其他标头的http请求

时间:2012-11-02 22:00:35

标签: python http http-headers httprequest

我想知道是否存在仅使用给定标头发送HTTP请求的工具。

我需要这个来测试一些应用程序,并希望在缺少某些HTTP头时观察应用程序的行为。

研究了urllib2,httplib和pycurl,但他们在内部添加了自己的标头(在最好的情况下,我们可以指定这些标头的值或将这些值设为空)。

我需要的是一个实用程序,我可以完全/透明地控制我要在请求中发送的HTTP标头(这样我就可以发送缺少content-length / content-type的请求等等并且应用程序仅与这些标头形成请求,而不在内部添加任何其他内容。

我可以使用浏览器插件执行此操作。

2 个答案:

答案 0 :(得分:3)

正如abartnert指出的那样,如果您愿意,可以使用套接字,但我认为值得注意的是CURL也能满足您的要求。来自http://curl.haxx.se/docs/manpage.html的手册页:

Remove an internal header by giving a replacement without
content on the right side of the colon, as in: -H "Host:".

答案 1 :(得分:1)

有很多方法可以做到这一点,但是你试图在字节级别完全控制请求,使用套接字可能更容易:

s = socket.socket()
s.connect((host, 80))
s.sendall(myrequest)

您可以在发送后实际将套接字挂钩到某些HTTP解析器库,但这可能很复杂。如果您正在分析整个结果,那么最好直接从套接字读取整个结果:

s.shutdown(socket.SHUT_WR)
result = ''
while True:
    buf = s.read(4096)
    if not buf: break
    result += buf