2011-12-05 86 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()