Sen HTTPResponse üzere tasarlanmamıştır unutmayın, bu konuda yararlı olabilecek "kullanıcı tarafından doğrudan başlatılamaz." Ayrıca, yanıt dizenizdeki içerik uzunluğu üstbilgisinin artık geçerli olmayabileceğini de unutmayın (bu yanıtları nasıl aldığınıza bağlı olarak değişir), bu yalnızca HTTPResponse.read() öğesine yapılan çağrının değere sahip olması gerektiği anlamına gelir. hepsini elde etmek için içerikten daha büyük.
Bu örnek, python v2'ye özgüdür, v3-ish'de StringIO için içe aktarma konumları ve httplib değişmiştir.
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
Bu gerçekten ihtiyacım olan hile gibi görünüyor. Muhtemelen basit amaçlar için düzenli ifadeler kullanarak yolumdan çalışabilirdim, ancak HTTPResponse kullanmak çok daha doğru bir şekilde hissediyor. Çok teşekkürler. –
Bir takip, test ve evet olarak, istediğimi yapar. –
ama hayatta kalma bağlantısı varsa ne olur? Bu çözümü kullanarak çoklu üstbilgileri/gövdeyi ayrıştırabilir miyiz? Bu yanıtsız soruya örnek olarak: http://stackoverflow.com/questions/34786880/multiple-response-parsing-in-python?lq=1 – sajjadG