POST रिक्वेस्ट कैसे भेजें?


260

मुझे यह स्क्रिप्ट ऑनलाइन मिली:

import httplib, urllib
params = urllib.urlencode({'number': 12524, 'type': 'issue', 'action': 'show'})
headers = {"Content-type": "application/x-www-form-urlencoded",
            "Accept": "text/plain"}
conn = httplib.HTTPConnection("bugs.python.org")
conn.request("POST", "", params, headers)
response = conn.getresponse()
print response.status, response.reason
302 Found
data = response.read()
data
'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
conn.close()

लेकिन मुझे समझ में नहीं आ रहा है कि इसे PHP के साथ कैसे उपयोग किया जाए या परमेस चर के अंदर क्या है या इसका उपयोग कैसे किया जाए। क्या मुझे यह काम करने की कोशिश करने में थोड़ी मदद मिल सकती है?


1
पोस्ट रिक्वेस्ट सिर्फ पोस्ट रिक्वेस्ट है, चाहे सर्वर साइड पर ही क्यों न हो।
ओंद्रा žयूस्का

7
यह एक POST अनुरोध भेजता है। तब सर्वर आपके POST में 302 (रीडायरेक्ट) हेडर के साथ प्रतिक्रिया करता है। वास्तव में क्या गलत है?
दिदनेचेव

1
इस स्क्रिप्ट में python3.2 कंप्रेशर्स नहीं दिखते
jd

इस उदाहरण के बराबर python3 हो सकता है: pastebin.com/Rx4yfknM
jd

1
क्या मैं सुझाव देगा फ़ायरफ़ॉक्स के स्थापित है live http headerऐड-ऑन और फ़ायरफ़ॉक्स में अपने यूआरएल से खुला और देखो request/responseमें यूआरएल का live http headerऐड-ऑन से आप क्या समझ जाएगा params and headersअपने कोड में है।
रणराग

जवाबों:


388

यदि आप वास्तव में पायथन का उपयोग करके HTTP के साथ काम करना चाहते हैं, तो मैं अत्यधिक अनुशंसा करता हूं : HTTP फॉर ह्यूमन । आपके प्रश्न के अनुकूल POST क्विकार्ट है:

>>> import requests
>>> r = requests.post("http://bugs.python.org", data={'number': 12524, 'type': 'issue', 'action': 'show'})
>>> print(r.status_code, r.reason)
200 OK
>>> print(r.text[:300] + '...')

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>
Issue 12524: change httplib docs POST example - Python tracker

</title>
<link rel="shortcut i...
>>> 

जैसा आपने ऊपर किया था वैसा ही परिणाम मुझे नहीं मिल रहा है। मैंने पृष्ठ पर एक और अंक संख्या लिखी और फिर स्क्रिप्ट को चलाया लेकिन मैं परिणाम पर अंक संख्या नहीं देख सका।
एफे बुयुडीज़

2
कृपया डेटा = {'नंबर': 12524, डेटा पढ़ने के लिए = {'नंबर': '12524' को बदलें। मैंने इसे स्वयं बदल लिया है, लेकिन संपादन में 6 से अधिक वर्ण होने चाहिए। धन्यवाद
kevthanewversi

2
Json परिणाम कैसे प्राप्त करें?
योहानेस एआई

9
अगर आपको एक JSON ऑब्जेक्ट भेजने की आवश्यकता है जो आपको करना चाहिए: json={'number': 12524...इसके बजायdata=...
Seraf

3
जवाब क्यों कहता है "यदि आप वास्तव में पायथन का उपयोग करके HTTP के साथ संभालना चाहते हैं"? क्या HTTP अनुरोधों को संभालना एक बुरा विचार है? यदि हां, तो क्यों? किसी को समझा सकते हैं कृपया?
जन पिसल २19

147

यदि आपको अपनी स्क्रिप्ट पोर्टेबल होने की आवश्यकता है और आपके पास कोई 3 पार्टी निर्भरता नहीं है, तो यह है कि आप पायथन 3 में विशुद्ध रूप से POST अनुरोध कैसे भेजते हैं।

from urllib.parse import urlencode
from urllib.request import Request, urlopen

url = 'https://httpbin.org/post' # Set destination URL here
post_fields = {'foo': 'bar'}     # Set POST fields here

request = Request(url, urlencode(post_fields).encode())
json = urlopen(request).read().decode()
print(json)

नमूना उत्पादन:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "foo": "bar"
  }, 
  "headers": {
    "Accept-Encoding": "identity", 
    "Content-Length": "7", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Python-urllib/3.3"
  }, 
  "json": null, 
  "origin": "127.0.0.1", 
  "url": "https://httpbin.org/post"
}

6
यह कोड केवल पायथन 3 में काम करेगा, जैसे मैंने उत्तर में कहा था।
stil

36

आप urllibकेवल (GET के लिए) का उपयोग करके POST अनुरोध प्राप्त नहीं कर सकते , इसके बजाय requestsमॉड्यूल का उपयोग करने का प्रयास करें , जैसे:

उदाहरण 1.0:

import requests

base_url="www.server.com"
final_url="/{0}/friendly/{1}/url".format(base_url,any_value_here)

payload = {'number': 2, 'value': 1}
response = requests.post(final_url, data=payload)

print(response.text) #TEXT/HTML
print(response.status_code, response.reason) #HTTP

उदाहरण 1.2:

>>> import requests

>>> payload = {'key1': 'value1', 'key2': 'value2'}

>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

उदाहरण 1.3:

>>> import json

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}

>>> r = requests.post(url, data=json.dumps(payload))

4
धन्यवाद। data = json.dumps (पेलोड) मेरे usecase के लिए कुंजी है
Aram

11

requestsGEST, POST, PUT या DELETE में लाइब्रेरी का उपयोग REST API एंडपॉइंट मार कर करें। बाकी एपीआई एंडपॉइंट url in url, पेलोड (तानाशाही) dataऔर हेडर / मेटाडेटा पास करेंheaders

import requests, json

url = "bugs.python.org"

payload = {"number": 12524, 
           "type": "issue", 
           "action": "show"}

header = {"Content-type": "application/x-www-form-urlencoded",
          "Accept": "text/plain"} 

response_decoded_json = requests.post(url, data=payload, headers=header)
response_json = response_decoded_json.json()

print response_json

2
इस कोड में इंडेंटेशन और हेडर परम नाम के साथ समस्याएँ हैं।
२०:२२ पर xilopaint

2
headersपैरामीटर गलत है और यहां भी हमारे पास कोई जसन नहीं है। हम का उपयोग करना चाहिएjson.dumps(pauload)
Arash Hatami

सिंटैक्स त्रुटि के लिए @xilopaint और ArashHatami धन्यवाद। अब ठीक हो गया।
प्रांजल

3

आपके डेटा डिक्शनरी में फॉर्म इनपुट क्षेत्रों के नाम शामिल हैं, आप परिणाम खोजने के लिए उनके मूल्यों को सही रखते हैं। प्रपत्र दृश्य हैडर आपके द्वारा घोषित प्रकार के डेटा को पुनः प्राप्त करने के लिए ब्राउज़र को कॉन्फ़िगर करता है। अनुरोध लाइब्रेरी के साथ POST भेजना आसान है:

import requests

url = "https://bugs.python.org"
data = {'@number': 12524, '@type': 'issue', '@action': 'show'}
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept":"text/plain"}
response = requests.post(url, data=data, headers=headers)

print(response.text)

अनुरोध वस्तु के बारे में अधिक जानकारी: https://requests.readthedocs.io/en/master/api/


1

यदि आप एक मॉड्यूल का उपयोग नहीं करना चाहते हैं जिसे आपको स्थापित करना है requests, और आपका उपयोग मामला बहुत ही बुनियादी है, तो आप उपयोग कर सकते हैंurllib2

urllib2.urlopen(url, body)

के लिए दस्तावेज़ देखें urllib2: यहां https://docs.python.org/2/library/urllib2.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.