Not: Bu cevap eski. AntonioHerraizS'in yanıt belgeleri requests olarak, istek içeriğini doğrudan almak için daha yeni destek sürümleri .
Yalnızca üstbilgiler ve yöntem türü gibi daha üst düzey nesnelerle ilgilendiğinden, isteğin gerçek ham içeriğini çıkarmak mümkün değildir . istekleri göndermek için kullanır , ancak ham verilerle de ilgilenmez - kullanır . İşte bir isteğin temsili yığın izlemesi:requestsrequestsurllib3urllib3 httplib
-> r= requests.get("http://google.com")
/usr/local/lib/python2.7/dist-packages/requests/api.py(55)get()
-> return request('get', url, **kwargs)
/usr/local/lib/python2.7/dist-packages/requests/api.py(44)request()
-> return session.request(method=method, url=url, **kwargs)
/usr/local/lib/python2.7/dist-packages/requests/sessions.py(382)request()
-> resp = self.send(prep, **send_kwargs)
/usr/local/lib/python2.7/dist-packages/requests/sessions.py(485)send()
-> r = adapter.send(request, **kwargs)
/usr/local/lib/python2.7/dist-packages/requests/adapters.py(324)send()
-> timeout=timeout
/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py(478)urlopen()
-> body=body, headers=headers)
/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py(285)_make_request()
-> conn.request(method, url, **httplib_request_kw)
/usr/lib/python2.7/httplib.py(958)request()
-> self._send_request(method, url, body, headers)
httplibMakinelerin içinde görebiliyoruzHTTPConnection._send_request dolaylı kullanımlarını HTTPConnection._send_outputnihayet ham isteği oluşturur ve (varsa) vücudu ve kullanımları HTTPConnection.sendbunları ayrı ayrı göndermek için. sendSonunda sokete ulaşır.
İstediğiniz şeyi yapmak için kanca olmadığından, son çare olarak httplibiçeriği almak için maymun yaması yapabilirsiniz . Kırılgan bir çözümdür ve httplibdeğiştirilirse uyarlamanız gerekebilir . Bu çözümü kullanarak yazılım dağıtmak istiyorsanız httplib, saf bir python modülü olduğu için, sistemin sistemlerini kullanmak yerine ambalajlamayı düşünebilirsiniz .
Ne yazık ki, daha fazla uzatmadan, çözüm:
import requests
import httplib
def patch_send():
old_send= httplib.HTTPConnection.send
def new_send( self, data ):
print data
return old_send(self, data) #return is not necessary, but never hurts, in case the library is changed
httplib.HTTPConnection.send= new_send
patch_send()
requests.get("http://www.python.org")
çıktı veren:
GET / HTTP/1.1
Host: www.python.org
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: python-requests/2.1.0 CPython/2.7.3 Linux/3.2.0-23-generic-pae