Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
响应真正简单的python http请求?_Python_Http - Fatal编程技术网

响应真正简单的python http请求?

响应真正简单的python http请求?,python,http,Python,Http,我正在用python编写一个简单的脚本 以下是脚本: import httplib requestFileName = 'C:/Users/Owner/request.txt' connectionURL = 'localhost:4059' requestFile = open(requestFileName,'r') connection = httplib.HTTPConnection(connectionURL) connection.send(requestFile.read()

我正在用python编写一个简单的脚本

以下是脚本:

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
回溯(最近一次呼叫最后一次):
文件“C:/Users/Owner/doHttpRequest.py”,第11行,在
response=connection.getresponse()
文件“C:\Python27\lib\httplib.py”,第1015行,在getresponse中
提高响应速度()
反应性
但是,我的服务器接收到请求。我可以使用调试器检查服务器代码,并查看请求是否正确传输,以及所有头


为什么我的脚本会说
responsenorady
?这不是一个大问题,因为我的脚本执行其主要任务(重播保存的http请求),但我希望能够使用脚本输出一些基本信息,例如状态代码,或者将响应的内容保存在某个地方。

HTTPConnection.send用于发送http请求的数据部分。因此,您应该只提供请求文件中的最后一行,而不是全部内容

如果您希望按原样使用请求,那么应该使用套接字模块来代替与服务器的原始连接

我如何使用“socket”模块的示例,可能对某些人有用

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()
哎哟,这有点痛(插座听起来很难用)。这很奇怪,因为
HttpConnection
的发送部分工作正常,只是接收部分坏了。