2012-11-02 106 views
2

我想知道是否存在一个工具来发送只有给定标头的HTTP请求。发送无内容长度或其他标头的http请求

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

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

我需要的是一个工具,我有HTTP标头我想在请求发送(这样我就可以缺少content-length/content-type等发送请求)的完整/透明控制和应用刚刚形成请求只有这些标题,而无需在内部添加任何其他内容。

我可以用浏览器插件做到这一点。

+1

许多图书馆都有他们已经建立后过滤头的方式,但会发出之前,他们(虽然它可以是相当在某些情况下复杂)。这足够好吗? – abarnert

+0

为什么你不直接套接字连接?手动制作HTTP请求并不困难。或者使用'netcat' – mata

回答

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

想必他使用了libcurl的一个Python包装器,而不是使用命令行工具。 (如果没有,他应该是......)但这一点仍然有效。虽然,如果他想要精确地指定他想要的标题,他需要有一个curl可能添加的所有标题的列表,否则他将无法告诉它哪些要删除。 – abarnert

+0

谢谢,编写一个直接的套接字连接是我的最后手段,但将使用上面提供的选项检查CURL。 – sysuser

+0

@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