2011-12-05 52 views
1

我正在写一个简单的Python脚本到replay saved HTTP requestsResponseNotReady非常简单的python http请求?

下面是脚本:

import httplib 

requestFileName = 'C:/Users/Owner/request.txt' 
connectionURL = 'localhost:4059' 

requestFile = open(requestFileName,'r') 

connection = httplib.HTTPConnection(connectionURL) 
connection.send(requestFile.read()) 

response = connection.getresponse() 
print response.status + " " + response.reason 

connection.close() 

这里是request.txt

POST /ipn/handler.ashx?inst=272&msgType=result HTTP/1.0 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Host: mysite.com 
Content-Length: 28 
User-Agent: AGENT/1.0 (UserAgent) 

region=website&compName=ACTL 

当我运行该脚本,我得到这个错误信息:

Traceback (most recent call last): 
    File "C:/Users/Owner/doHttpRequest.py", line 11, in <module> 
    response = connection.getresponse() 
    File "C:\Python27\lib\httplib.py", line 1015, in getresponse 
    raise ResponseNotReady() 
ResponseNotReady 

然而,我服务器收到请求罚款。我可以使用调试器检查服务器代码,并看到请求已正确传输,包含所有标题。

为什么我的脚本说ResponseNotReady?这不是一个很大的问题,因为我的脚本执行它的主要任务(重播保存的http请求),但我希望能够输出脚本的一些基本信息,例如状态码,或者保存响应某处

回答

1

HTTPConnection.send用于发送HTTP请求的数据部分。所以,你应该只提供你的请求文件中的最后一行,而不是整个事情。

如果您想按原样使用您的请求,则应该使用套接字模块来代替与服务器的原始连接。我如何使用“插座”模块

+0

哎哟有用的,这是一种痛苦的(插座听起来更难使用)。这很奇怪,因为'HttpConnection'的发送部分工作正常,只是接收部分中断。 – Oliver

1

例如,可能是有人

input_request_string = '''GET /cherry/mirror_simple HTTP/1.1\r\nContent-Length: 0\r\nHost: test-host.dom:8001\r\n\r\n''' 

host = 'test-host.dom' 
port = 8001 

# Connect to the server 
s = socket.socket() 
s.connect((host, port)) 
s.send(request_string) 

from httplib import HTTPResponse  
response = HTTPResponse(s) 
response.begin() 
body = response.read() 
headers = str(response.msg) 
s.close()