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:requests
requests
urllib3
urllib3
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)
httplib
Makinelerin içinde görebiliyoruzHTTPConnection._send_request
dolaylı kullanımlarını HTTPConnection._send_output
nihayet ham isteği oluşturur ve (varsa) vücudu ve kullanımları HTTPConnection.send
bunları ayrı ayrı göndermek için. send
Sonunda sokete ulaşır.
İstediğiniz şeyi yapmak için kanca olmadığından, son çare olarak httplib
içeriği almak için maymun yaması yapabilirsiniz . Kırılgan bir çözümdür ve httplib
değ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