দ্রষ্টব্য: এই উত্তরটি পুরানো। অ্যান্টোনিওহাইরাইজস এর উত্তর নথি requests হিসাবে সরাসরি অনুরোধের সামগ্রী পাওয়া সমর্থনের নতুন সংস্করণগুলি ।
অনুরোধের সত্যিকারের কাঁচামাল পাওয়া সম্ভব নয় 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সামগ্রীটি পেতে বানর প্যাচ করতে পারেন p এটি একটি ভঙ্গুর সমাধান এবং 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