发送没有content-length或其他头部信息的http请求

3

我想知道是否存在一个工具可以仅发送带有特定标头的HTTP请求。

我需要这个工具来测试某些应用程序,并在某些HTTP标头缺失时观察应用程序的行为。

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

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

我可以使用浏览器插件实现此操作。


1
许多库在构建头文件后但发送前有一种过滤方式(尽管在某些情况下可能会相当复杂)。这样足够好吗? - abarnert
为什么不直接建立套接字连接?手动构造HTTP请求并不难。或者使用netcat - mata
2个回答

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:".

他可能正在使用libcurl周围的Python包装器之一,而不是弹出命令行工具。(如果不是,他应该这样做...)但是观点仍然有效。虽然,如果他想要指定他想要的确切标头,他需要拥有curl可能添加的所有标头列表,否则他将无法告诉它要删除哪些标头。 - abarnert
谢谢,编写直接套接字连接是我的最后一招,但我会尝试使用上面建议的选项来检查CURL。 - sysuser
@abarnert同意,但如果您想查看在缺少某些特定标头的情况下会发生什么,那么这是一个不错的工具。 - Andbdrew

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接