[英]python parse http response (string)
我正在使用 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
提前致谢,
您可能会发现这很有用,请记住HTTPResponse并非旨在“由用户直接实例化”。
另请注意,响应字符串中的内容长度标头可能不再有效(这取决于您如何获取这些响应)这仅意味着对 HTTPResponse.read() 的调用需要具有大于内容的值为了得到这一切。
在python 2中,它可以这样运行。
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
在python 3中, HTTPResponse
是从http.client
导入的,需要解析的响应需要进行字节编码。 取决于从中获取数据的位置,这可能已经完成或需要显式调用
from http.client import HTTPResponse
from io import BytesIO
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
teststring"""
http_response_bytes = http_response_str.encode()
class FakeSocket():
def __init__(self, response_bytes):
self._file = BytesIO(response_bytes)
def makefile(self, *args, **kwargs):
return self._file
source = FakeSocket(http_response_bytes)
response = HTTPResponse(source)
response.begin()
print( "status:", response.status)
# status: 200
print( "single header:", response.getheader('Content-Type'))
# single header: text/xml; charset="utf-8"
print( "content:", response.read(len(http_response_str)))
# content: b'teststring'
您可能需要考虑使用 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!'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.