দ্রষ্টব্য: এই উত্তরটি পুরানো। অ্যান্টোনিওহাইরাইজস এর উত্তর নথি 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