2011-12-26 21 views
18
साथ JSON अनुरोध भेजा जा रहा

मैं वेब सेवाओं के लिए नए कर रहा हूँ और एक अजगर स्क्रिप्ट का उपयोग निम्नलिखित JSON आधारित अनुरोध भेजने के लिए कोशिश कर रहा हूँ: अगर मैं एक ब्राउज़र में ऊपर पेस्टअजगर

http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx&json={power:290.4,temperature:19.4} 

, यह काम करता है के रूप में उम्मीद । हालांकि, मैं पायथन से अनुरोध भेजने के लिए संघर्ष कर रहा हूं। निम्नलिखित है जो मैं कोशिश कर रहा हूं:

import json 
import urllib2 
data = {'temperature':'24.3'} 
data_json = json.dumps(data) 
host = "http://myserver/emoncms2/api/post" 
req = urllib2.Request(host, 'GET', data_json, {'content-type': 'application/json'}) 
response_stream = urllib2.urlopen(req) 
json_response = response_stream.read() 

मैं अनुरोध में apikey डेटा कैसे जोड़ूं?

धन्यवाद!

उत्तर

26

urllib2 का उपयोग करने के बजाय, आप requests का उपयोग कर सकते हैं। यह नया पायथन lib वास्तव में अच्छी तरह लिखा गया है और यह उपयोग करना आसान और अधिक सहज है।

आप निम्नलिखित कोड की तरह कुछ का उपयोग कर सकते अपने json डेटा भेजने के लिए:

import json 
import requests 
data = {'temperature':'24.3'} 
data_json = json.dumps(data) 
payload = {'json_payload': data_json, 'apikey': 'YOUR_API_KEY_HERE'} 
r = requests.get('http://myserver/emoncms2/api/post', data=payload) 

फिर आप r निरीक्षण HTTP स्थिति कोड, सामग्री प्राप्त करने के लिए कर सकते हैं, आदि

+0

आपकी प्रतिक्रिया के लिए धन्यवाद! क्या कोई तरीका है जिसका उपयोग मैं वास्तविक प्राप्त अनुरोध स्ट्रिंग को मुद्रित करने के लिए कर सकता हूं? सर्वर "वैध लेखन apikey आवश्यक" के साथ जवाब दे रहा है, लेकिन मैं ब्राउज़र में काम करता है कि एक ही कुंजी का उपयोग कर रहा हूँ। –

+0

हां, आप इसके लिए एक ईवेंट हुक का उपयोग कर सकते हैं। असल में अनुरोध दस्तावेज़ों में केवल एक उदाहरण होता है, अनुरोध भेजने से पहले यूआरएल प्रिंट करना: http://docs.python-requests.org/en/latest/user/advanced/#event-hooks – simao

+0

हाय सिमाओ, जो मुझे देता है तर्कों को देखने की क्षमता, लेकिन सर्वर पर भेजे जा रहे वास्तविक पूर्ण अनुरोध स्ट्रिंग को देखने के लिए मुझे क्या करने की आवश्यकता है, उदाहरण के लिए http://http: // myserver/emoncms2/api/post? apikey = xxxxxxxxxxxxx और json = {power : 2 9 0.4, तापमान: 1 9 .4} –

1

हो सकता है कि समस्या यह है कि json.dumps है " डालता है और जेसन में आप यूआरएल डालते हैं " एस नहीं हैं। उदाहरण के लिए:

data = {'temperature':'24.3'} 
print json.dumps(data) 

प्रिंट:

{"temperature": "24.3"}

और नहीं:

{temperature: 24.3}

चाहें तो अपने URL में डाल दिया।

इस सुलझाने (जो प्रवण मुसीबत है) का एक तरीका यह करना है:

json.dumps(data).replace('"', '') 
+0

आपके उत्तर के लिए धन्यवाद।मैंने ब्राउजर में कुंजी और मूल्यों के चारों ओर उद्धरण के साथ अनुरोध भेजने का परीक्षण किया है, और यह अभी भी ठीक काम करता है। मुझे लगता है कि मुख्य समस्या यह है कि apyyy डेटा मेरी पायथन लिपि से ठीक से नहीं भेजा जा रहा है। –

+0

इस पर अपना कोड बदलने के बारे में: 'पैराम्स = urllib.urlencode ({'apikey': 'xxxxxxx', 'json': {'तापमान': '24.3'}}) \ urllib2.urlopen (होस्ट + '?' + पैराम्स) ' – Guy