Python Language
पायथन अनुरोध पोस्ट
खोज…
परिचय
HTTP POST विधि और इसके संबंधित अनुरोध फ़ंक्शन के संदर्भ में पायथन अनुरोध मॉड्यूल के लिए प्रलेखन
सरल पोस्ट
from requests import post
foo = post('http://httpbin.org/post', data = {'key':'value'})
एक सरल HTTP POST ऑपरेशन करेंगे। पोस्ट किए गए डेटा सबसे बड़े प्रारूप हो सकते हैं, हालांकि प्रमुख मूल्य जोड़े सबसे अधिक प्रचलित हैं।
हेडर
हेडर देखे जा सकते हैं:
print(foo.headers)
एक उदाहरण प्रतिक्रिया:
{'Content-Length': '439', 'X-Processed-Time': '0.000802993774414', 'X-Powered-By': 'Flask', 'Server': 'meinheld/0.6.1', 'Connection': 'keep-alive', 'Via': '1.1 vegur', 'Access-Control-Allow-Credentials': 'true', 'Date': 'Sun, 21 May 2017 20:56:05 GMT', 'Access-Control-Allow-Origin': '*', 'Content-Type': 'application/json'}
पोस्ट से पहले हेडर भी तैयार किए जा सकते हैं:
headers = {'Cache-Control':'max-age=0',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36',
'Content-Type':'application/x-www-form-urlencoded',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Referer':'https://www.groupon.com/signup',
'Accept-Encoding':'gzip, deflate, br',
'Accept-Language':'es-ES,es;q=0.8'
}
foo = post('http://httpbin.org/post', headers=headers, data = {'key':'value'})
एन्कोडिंग
एन्कोडिंग को एक ही तरीके से सेट और देखा जा सकता है:
print(foo.encoding)
'utf-8'
foo.encoding = 'ISO-8859-1'
एसएसएल सत्यापन
डिफ़ॉल्ट रूप से अनुरोध डोमेन के SSL प्रमाणपत्रों को मान्य करता है। इसे ओवरराइड किया जा सकता है:
foo = post('http://httpbin.org/post', data = {'key':'value'}, verify=False)
पुनर्निर्देशन
किसी भी पुनर्निर्देशन का पालन किया जाएगा (जैसे http से https तक) इसे भी बदला जा सकता है:
foo = post('http://httpbin.org/post', data = {'key':'value'}, allow_redirects=False)
यदि पोस्ट ऑपरेशन को पुनर्निर्देशित किया गया है, तो इस मूल्य तक पहुँचा जा सकता है:
print(foo.url)
रीडायरेक्ट का पूरा इतिहास देखा जा सकता है:
print(foo.history)
फॉर्म एनकोडेड डाटा
from requests import post
payload = {'key1' : 'value1',
'key2' : 'value2'
}
foo = post('http://httpbin.org/post', data=payload)
पोस्ट ऑपरेशन के साथ एन्कोडेड डेटा पास करने के लिए, डेटा को शब्दकोश के रूप में संरचित किया जाना चाहिए और डेटा पैरामीटर के रूप में आपूर्ति की जानी चाहिए।
यदि डेटा एन्कोडेड नहीं होना चाहता है, तो बस डेटा पैरामीटर में एक स्ट्रिंग, या पूर्णांक पास करें।
डेटा को स्वचालित रूप से प्रारूपित करने के अनुरोधों के लिए शब्दकोष को शब्दकोश की आपूर्ति करें:
from requests import post
payload = {'key1' : 'value1', 'key2' : 'value2'}
foo = post('http://httpbin.org/post', json=payload)
फाइल अपलोड
अनुरोध मॉड्यूल के साथ, यह केवल .read()
साथ पुनर्प्राप्त सामग्री के विपरीत फ़ाइल हैंडल प्रदान करने के लिए आवश्यक है।
from requests import post
files = {'file' : open('data.txt', 'rb')}
foo = post('http://http.org/post', files=files)
फ़ाइल नाम, content_type और हेडर भी सेट किए जा सकते हैं:
files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
foo = requests.post('http://httpbin.org/post', files=files)
स्ट्रिंग्स को एक फ़ाइल के रूप में भी भेजा जा सकता है, जब तक कि उन्हें files
पैरामीटर के रूप में आपूर्ति की जाती है।
एकाधिक फ़ाइलें
एकाधिक फ़ाइलों को एक फ़ाइल के समान ही आपूर्ति की जा सकती है:
multiple_files = [
('images', ('foo.png', open('foo.png', 'rb'), 'image/png')),
('images', ('bar.png', open('bar.png', 'rb'), 'image/png'))]
foo = post('http://httpbin.org/post', files=multiple_files)
जवाब
प्रतिक्रिया कोड को पोस्ट ऑपरेशन से देखा जा सकता है:
from requests import post
foo = post('http://httpbin.org/post', data={'data' : 'value'})
print(foo.status_code)
डेटा लौटाया
लौटाए गए डेटा तक पहुँच:
foo = post('http://httpbin.org/post', data={'data' : 'value'})
print(foo.text)
कच्ची प्रतिक्रियाएँ
ऐसे उदाहरणों में, जहाँ आपको अंतर्निहित urllib3 response.HTTPResponse ऑब्जेक्ट तक पहुँचने की आवश्यकता है, यह निम्नलिखित द्वारा किया जा सकता है:
foo = post('http://httpbin.org/post', data={'data' : 'value'})
res = foo.raw
print(res.read())
प्रमाणीकरण
सरल HTTP प्रमाणीकरण
सरल HTTP प्रमाणीकरण निम्नलिखित के साथ प्राप्त किया जा सकता है:
from requests import post
foo = post('http://natas0.natas.labs.overthewire.org', auth=('natas0', 'natas0'))
यह निम्नलिखित के लिए तकनीकी रूप से छोटा हाथ है:
from requests import post
from requests.auth import HTTPBasicAuth
foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPBasicAuth('natas0', 'natas0'))
HTTP डाइजेस्ट ऑथेंटिकेशन
HTTP डाइजेस्ट प्रमाणीकरण बहुत समान तरीके से किया जाता है, अनुरोध इसके लिए एक अलग वस्तु प्रदान करता है:
from requests import post
from requests.auth import HTTPDigestAuth
foo = post('http://natas0.natas.labs.overthewire.org', auth=HTTPDigestAuth('natas0', 'natas0'))
कस्टम प्रमाणीकरण
कुछ मामलों में प्रमाणीकरण प्रणाली में निर्मित पर्याप्त नहीं हो सकता है, इस उदाहरण की कल्पना करें:
एक सर्वर प्रमाणीकरण को स्वीकार करने के लिए कॉन्फ़िगर किया गया है यदि प्रेषक के पास सही उपयोगकर्ता-एजेंट स्ट्रिंग, एक निश्चित हेडर मूल्य है और HTTP बेसिक प्रमाणीकरण के माध्यम से सही क्रेडेंशियल्स की आपूर्ति करता है। इसे प्राप्त करने के लिए एक कस्टम प्रमाणीकरण वर्ग तैयार किया जाना चाहिए, जो ऑथबेस को उपवर्गित कर रहा है, जो अनुरोध प्रमाणीकरण कार्यान्वयन के लिए आधार है:
from requests.auth import AuthBase
from requests.auth import _basic_auth_str
from requests._internal_utils import to_native_string
class CustomAuth(AuthBase):
def __init__(self, secret_header, user_agent , username, password):
# setup any auth-related data here
self.secret_header = secret_header
self.user_agent = user_agent
self.username = username
self.password = password
def __call__(self, r):
# modify and return the request
r.headers['X-Secret'] = self.secret_header
r.headers['User-Agent'] = self.user_agent
r.headers['Authorization'] = _basic_auth_str(self.username, self.password)
return r
यह तब निम्न कोड के साथ उपयोग किया जा सकता है:
foo = get('http://test.com/admin', auth=CustomAuth('SecretHeader', 'CustomUserAgent', 'user', 'password' ))
प्रॉक्सी
नेटवर्क प्रॉक्सी का उपयोग करने के लिए प्रत्येक अनुरोध POST ऑपरेशन को कॉन्फ़िगर किया जा सकता है
HTTP / S प्रॉक्सी
from requests import post
proxies = {
'http': 'http://192.168.0.128:3128',
'https': 'http://192.168.0.127:1080',
}
foo = requests.post('http://httpbin.org/post', proxies=proxies)
HTTP बेसिक प्रमाणीकरण इस तरीके से प्रदान किया जा सकता है:
proxies = {'http': 'http://user:[email protected]:312'}
foo = requests.post('http://httpbin.org/post', proxies=proxies)
SOCKS प्रॉक्सी
मोज़े परदे के उपयोग के लिए 3 पार्टी निर्भरता requests[socks]
आवश्यकता होती है requests[socks]
, एक बार स्थापित मोजे परदे के पीछे HTTPBasicAuth के समान तरीके से उपयोग किए जाते हैं:
proxies = {
'http': 'socks5://user:pass@host:port',
'https': 'socks5://user:pass@host:port'
}
foo = requests.post('http://httpbin.org/post', proxies=proxies)