2012-07-04 42 views
134

मैं ऑनलाइन इस स्क्रिप्ट पाया:POST अनुरोध कैसे भेजें?

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

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

+1

यह स्क्रिप्ट python3.2 compat – jdi

उत्तर

214

तुम सच में HTTP अजगर उपयोग करने के साथ संभाल करने के लिए चाहते हैं, मैं अत्यधिक Requests: HTTP for Humans सलाह देते हैं। POST quickstart अपने प्रश्न के लिए अनुकूलित है:

>>> 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... 
>>> 
+0

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

+1

डेटा = {'संख्या': '12524' पढ़ने के लिए कृपया डेटा = {'संख्या': 12524 बदलें। मैं इसे स्वयं बदल दूंगा लेकिन संपादन 6 से अधिक वर्ण होने की आवश्यकता है। रिकॉर्ड के लिए धन्यवाद – kevthanewversi

+0

: मेरे लिए हाल ही में एक वर्किंग कोड, डेटा = {'@ नंबर': '12524', '@type': 'issue', '@action': 'show'} – marr

15

आप urllib का उपयोग कर (केवल प्राप्त के लिए) पोस्ट अनुरोध प्राप्त नहीं कर सकता है, इसके बजाय 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)) 
81

आप अपनी स्क्रिप्ट की जरूरत है पोर्टेबल होने के लिए और अगर आप किसी भी 3 पार्टी निर्भरता नहीं चाहते हैं, तो यह आपको कैसे पायथन में 3.

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

संबंधित मुद्दे