Można znaleźć to przydatne, należy pamiętać, że HTTPResponse nie został zaprojektowany, aby być „wystąpienia bezpośrednio przez użytkownika.”
Należy również zauważyć, że nagłówek długości treści w łańcuchu odpowiedzi może już nie być poprawny (zależy to od sposobu uzyskania tych odpowiedzi), oznacza to tylko, że wywołanie funkcji HTTPResponse.read() musi mieć wartość większy niż zawartość, aby uzyskać wszystko.
Ten przykład jest specyficzny dla Pythona v2, w wersjach V3 zmieniono lokalizacje importu dla StringIO i 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
To naprawdę wygląda na lewę, jakiej potrzebowałem. Prawdopodobnie mógłbym sobie poradzić poprzez użycie wyrażeń regularnych dla moich prostych celów, ale używanie HTTPResponse wydaje się dużo bardziej poprawne. Dziękuję bardzo. –
Jako kontynuacja, przetestowany i tak, robi to, co chcę. –
, ale co, jeśli istnieje połączenie podtrzymujące połączenie? czy możemy analizować wiele nagłówków/treści za pomocą tego rozwiązania? coś jak przykład tego pytania bez odpowiedzi: http://stackoverflow.com/questions/34786880/multiple-response-parsing-in-python?lq=1 – sajjadG