หมายเหตุ: คำตอบนี้ล้าสมัยแล้ว รุ่นใหม่ของrequests
การสนับสนุนการรับเนื้อหาขอร้องโดยตรงเช่นAntonioHerraizS คำตอบของเอกสาร
มันเป็นไปไม่ได้ที่จะได้รับความจริงเนื้อหาดิบของการร้องขอออกจาก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
เครื่องจักรเราสามารถเห็นการHTTPConnection._send_request
ใช้ทางอ้อมHTTPConnection._send_output
ซึ่งในที่สุดก็สร้างคำขอและตัววัตถุดิบ(ถ้ามี) และใช้HTTPConnection.send
เพื่อส่งแยกต่างหาก send
ในที่สุดก็ถึงซ็อกเก็ต
เนื่องจากไม่มีตะขอสำหรับการทำสิ่งที่คุณต้องการเป็นทางเลือกสุดท้ายคุณสามารถลิงปะhttplib
เพื่อรับเนื้อหา มันเป็นทางออกที่บอบบางและคุณอาจจำเป็นต้องปรับเปลี่ยนหากhttplib
มีการเปลี่ยนแปลง หากคุณตั้งใจจะแจกจ่ายซอฟต์แวร์โดยใช้วิธีแก้ปัญหานี้คุณอาจต้องการพิจารณาบรรจุภัณฑ์httplib
แทนการใช้ระบบซึ่งง่ายเพราะเป็นโมดูลหลามบริสุทธิ์
อนิจจาโดยไม่ต้องกังวลใจต่อการแก้ปัญหา:
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")
ซึ่งให้ผลผลิต:
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