উত্তর:
আমি অতীতে বিভিন্ন ধরণের পাইথন এইচটিটিপি লিব ব্যবহার করেছি এবং আমি আমার অনুরোধ হিসাবে ' রিকোয়েস্টস'-এ স্থির করেছি । বিদ্যমান লিবসের বেশ কার্যকর ব্যবহারযোগ্য ইন্টারফেস ছিল, তবে কোডটি সাধারণ ক্রিয়াকলাপের জন্য কয়েক লাইন দীর্ঘ দীর্ঘ হতে পারে। অনুরোধগুলির মধ্যে একটি বেসিক পুট দেখতে লাগে:
payload = {'username': 'bob', 'email': 'bob@bob.com'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)
তারপরে আপনি এর সাথে প্রতিক্রিয়া স্থিতি কোডটি চেক করতে পারেন:
r.status_code
বা এর সাথে প্রতিক্রিয়া:
r.content
অনুরোধগুলিতে প্রচুর সিনড্যাকটিক চিনি এবং শর্টকাট রয়েছে যা আপনার জীবনকে আরও সহজ করে তুলবে।
json=payload
ডেটা শরীরে থাকতে চাইলে প্যারামিটার ব্যবহার করুন ।
import urllib2
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request('http://example.org', data='your_put_data')
request.add_header('Content-Type', 'your/contenttype')
request.get_method = lambda: 'PUT'
url = opener.open(request)
requests
পরিবর্তে গ্রন্থাগার ব্যবহার বিবেচনা করুন ।
এইচটিপিপ্লিব একটি ক্লিনারের পছন্দ বলে মনে হচ্ছে।
import httplib
connection = httplib.HTTPConnection('1.2.3.4:1234')
body_content = 'BODY CONTENT GOES HERE'
connection.request('PUT', '/url/path/to/put/to', body_content)
result = connection.getresponse()
# Now result.status and result.reason contains interesting stuff
আপনার httplib মডিউলটি দেখতে হবে । এটি আপনাকে যে কোনও প্রকারের HTTP অনুরোধটি তৈরি করতে দেয়।
আমার কিছুক্ষণ আগে এই সমস্যাটি সমাধান করা দরকার ছিল যাতে আমি একটি রেস্টলফুল এপিআইয়ের ক্লায়েন্ট হিসাবে কাজ করতে পারি। আমি httplib2 এ স্থায়ী হয়েছি কারণ এটি আমাকে জিইটি এবং পোস্টের পাশাপাশি পুট এবং ডিলেট পাঠাতে দেয়। এইচটিপিপ্লিব 2 স্ট্যান্ডার্ড লাইব্রেরির অংশ নয় তবে আপনি এটি খুব সহজেই পনির দোকান থেকে পেতে পারেন।
আপনি অনুরোধের লাইব্রেরিটি ব্যবহার করতে পারেন, এটি urllib2 পদ্ধতির সাথে তুলনা করার তুলনায় জিনিসগুলিকে অনেক সহজ করে তোলে। প্রথমে এটি পাইপ থেকে ইনস্টল করুন:
pip install requests
অনুরোধগুলি ইনস্টল করার বিষয়ে আরও ।
তারপরে রাখার অনুরোধটি সেটআপ করুন:
import requests
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
# Create your header as required
headers = {"content-type": "application/json", "Authorization": "<auth-key>" }
r = requests.put(url, data=json.dumps(payload), headers=headers)
অনুরোধ লাইব্রেরির জন্য কুইকস্টার্টটি দেখুন । আমি এটি urllib2 এর চেয়ে অনেক সহজ বলে মনে করি তবে এটি অতিরিক্ত প্যাকেজটি ইনস্টল এবং আমদানি করা দরকার।
এটি পাইথন 3 এ আরও ভাল করা হয়েছিল এবং স্টাডলিব ডকুমেন্টেশনে নথিভুক্ত করা হয়েছিল
urllib.request.Request
বর্গ একটি অর্জন method=...
python3 মধ্যে প্যারামিটার।
কিছু নমুনা ব্যবহার:
req = urllib.request.Request('https://example.com/', data=b'DATA!', method='PUT')
urllib.request.urlopen(req)
জো গ্রেগারিওর দ্বারাও আমি httplib2 এর প্রস্তাব দিই । আমি স্ট্যান্ডার্ড লাইব এ httplib এর পরিবর্তে নিয়মিত এটি ব্যবহার করি।
আপনি কি put.py এ একবার দেখেছেন ? আমি অতীতে এটি ব্যবহার করেছি আপনি urlib দিয়ে কেবল নিজের অনুরোধটি হ্যাক করতে পারেন।
আপনি অবশ্যই বিদ্যমান স্ট্যান্ডার্ড গ্রন্থাগারগুলির সাথে সকেট থেকে শুরু করে টুইটারের urllib পর্যন্ত যে কোনও স্তরে আপনার নিজের রোল করতে পারেন।
http://pycurl.sourceforge.net/
"পাইকার্কেল লাইবকার্লের জন্য পাইথন ইন্টারফেস" "
"libcurl হ'ল একটি নিখরচায় এবং সহজেই ব্যবহারযোগ্য ক্লায়েন্ট-সাইডের ইউআরএল স্থানান্তর পাঠাগার, ... সমর্থন ... HTTP পুট"
"পাইকিউআরএল-এর প্রধান অসুবিধাটি হ'ল এটি লাইবকার্লের তুলনায় একটি অপেক্ষাকৃত পাতলা স্তর যা এই পাইথোনিক শ্রেণীর শ্রেণিবিন্যাসের কোনওটি ছাড়াই This এটির অর্থ এটি কিছুটা খাড়া শেখার বক্ররেখা থাকে যদি না আপনি ইতিমধ্যে লাইবর্কালের সি এপিআইয়ের সাথে পরিচিত হন।"
আপনি যদি স্ট্যান্ডার্ড লাইব্রেরির মধ্যে থাকতে চান তবে আপনি সাবক্লাস করতে পারেন urllib2.Request
:
import urllib2
class RequestWithMethod(urllib2.Request):
def __init__(self, *args, **kwargs):
self._method = kwargs.pop('method', None)
urllib2.Request.__init__(self, *args, **kwargs)
def get_method(self):
return self._method if self._method else super(RequestWithMethod, self).get_method()
def put_request(url, data):
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = RequestWithMethod(url, method='PUT', data=data)
return opener.open(request)
এটি করার আরও একটি সঠিক উপায় হ'ল requests
:
import requests
payload = {'username': 'bob', 'email': 'bob@bob.com'}
try:
response = requests.put(url="http://somedomain.org/endpoint", data=payload)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(e)
raise
HTTP PUT অনুরোধে কোনও ত্রুটি থাকলে এটি একটি ব্যতিক্রম উত্থাপন করে।