python解析http响应(字符串)

时间:2014-07-14 00:17:24

标签: python http

我正在使用python 2.7,我想解析我已经从文本文件中提取的字符串HTTP响应字段。什么是最简单的方法?我可以使用BaseHTTPServer解析请求,但无法找到响应的内容。

我的回答非常标准,并采用以下格式

HTTP/1.1 200 OK
Date: Thu, Jul  3 15:27:54 2014
Content-Type: text/xml; charset="utf-8"
Connection: close
Content-Length: 626

提前致谢,

2 个答案:

答案 0 :(得分:19)

您可能会觉得这很有用,请注意HTTPResponse并未设计为直接由用户实例化。"

另请注意,响应字符串中的内容长度标头可能不再有效(这取决于您获取这些响应的方式)这只是意味着对HTTPResponse.read()的调用需要具有为了得到这一切,大于内容的价值。

此示例特定于python v2,在v3-ish中,StringIO和httplib的导入位置已更改。

from httplib import HTTPResponse
from StringIO import StringIO

http_response_str = """HTTP/1.1 200 OK
Date: Thu, Jul  3 15:27:54 2014
Content-Type: text/xml; charset="utf-8"
Connection: close
Content-Length: 626"""

class FakeSocket():
    def __init__(self, response_str):
        self._file = StringIO(response_str)
    def makefile(self, *args, **kwargs):
        return self._file

source = FakeSocket(http_response_str)
response = HTTPResponse(source)
response.begin()
print "status:", response.status
print "single header:", response.getheader('Content-Type')
print "content:", response.read(len(http_response_str)) # the len here will give a 'big enough' value to read the whole content

答案 1 :(得分:-3)

您可能需要考虑使用python-requests。

链接:http://docs.python-requests.org/en/latest/

以下是http://dancallahan.info/journal/python-requests/

的示例

考虑您的回复符合HTTP RFC

这看起来像你想做的事吗?

>>> import requests
>>> url = 'http://example.test/'
>>> response = requests.get(url)
>>> response.status_code
200
>>> response.headers['content-type']
'text/html; charset=utf-8'
>>> response.content
u'Hello, world!'