2010-04-12 18 views
6

मैं अजगर के लिए नौसिखिया हूं, मेरे पास कार्य है इसलिए मुझे वाईफाई स्कैन करने और सर्वर को डेटा भेजने की आवश्यकता है, नीचे दिया गया प्रारूप मुझे भेजना है, यह ठीक है जब ब्राउज़र यूआरएल पाठ बॉक्स में मैन्युअल रूप से दर्ज,कैसे पाइथन http अनुरोध और प्रतिक्रिया काम करता है

http://223.56.124.58:8080/ppod-web/ProcessRawData?data={"userId":"2220081127-14","timestamp":"2010-04-12 10:54:24","wifi":{"ssid":"guest","rssi":"80"}} 

यहाँ मेरी कोड है:

import httplib 
import urllib 

params = urllib.urlencode('{\"userId\":\"20081127-14\",\"timestamp\":\"2010-04-12 10:54:24\",\"wifi\":{\"ssid\":\"guest\",\"rssi\":\"80\"}}') 

headers = {"Content-type":"application/x-www-form-urlencoded","Accept":"text/plain"} 
conn = httplib.HTTPConnection("http://223.56.124.58:8080") 
conn.request("POST","ppod-web/ProcessRawData?data=",params,headers) 
response = conn.getresponse() 
print response.status 
print "-----" 
print response.reason 
data = response.read() 
print data 
conn.close() 

धन्यवाद

+0

यदि आपके पास कोई नया प्रश्न है, तो कृपया 'नया प्रश्न' बटन का उपयोग करें। :) मूल प्रश्न लिंक: http://stackoverflow.com/revisions/f7804379-ffed-4ccb-bf96-b60865617396/view- स्रोत – badp

+0

सेकेंड किया गया। संपादन वापस रोल किया। –

+0

मुझे कक्षा लोड –

उत्तर

10

सबसे अधिक संभावना, स्क्रिप्ट आप प्रश्न में पोस्ट के साथ इस मुद्दे आप कर सकते हैं सीधे नहीं है:

conn=httplib.HTTPConnection("http://223.56.124.58:8080/wireless") 

अपवाद getaddrinfo(), जो सी समारोह getaddrinfo() जो EAI_NONAME रिटर्न कॉल में शुरू हो रहा है:

The node or service is not known; or both node and service are NULL; or AI_NUMERICSERV was specified in hints.ai_flags and service was not a numeric port-number string."

स्पष्ट रूप से getaddrinfo पर पैरामीटर के साथ एक समस्या है, और संभवतः आप सूचना प्राप्त करने की कोशिश कर रहे हैं "223.56.124.58:8080/wireless" होस्ट के लिए आयन। ओह!

वास्तव में, आप सीधे एक यूआरएल पते से कनेक्ट नहीं हो सकते हैं। As the documentation clearly states and shows, आप सर्वर से कनेक्ट:

conn = httplib.HTTPConnection("223.56.124.58", 8080) 

तो फिर तुम कर सकते हैं:

conn.request("POST", "wireless", params, headers) 

क्या के बारे में स्क्रिप्ट आप वास्तव में कर रहे का उपयोग कर?

conn.request("POST","http://202.45.139.58:8080/ppod-web",params,headers) 

यहां तक ​​कि अगर कनेक्शन सही तरीके से गठन किया गया था, कि तुम http://202.45.139.58:8080/http://202.45.139.58:8080/ppod-web पर पोस्ट करने के लिए होगा। क्या तुम सच में शायद चाहते हैं: इस लाइन के लिए

conn = httplib.HTTPConnection("202.45.139.58", 8080) 
conn.request("POST", "ppod-web", params, headers) 

त्रुटि दिखाया गया है क्योंकि सबसे अधिक संभावना HTTPConnection एक आलसी वस्तु है और केवल वास्तव में सर्वर से कनेक्ट करने के लिए जब आप request() फोन प्रयास करता है।


के बाद आप ऊपर फिक्सिंग लें, तो आप params को ठीक करना होगा।

>>> urllib.urlencode({"wifi":{"ssid":"guest","rssi","80"}}) 
SyntaxError: invalid syntax 
>>> urllib.urlencode({"wifi":{"ssid":"guest","rssi":"80"}}) 
'wifi=%7B%27rssi%27%3A+%2780%27%2C+%27ssid%27%3A+%27guest%27%7D' 

आप क्या सोचते हैं आप प्राप्त करना चाहते हैं पाने के लिए आपको क्या करना चाहिए:

>>> urllib.urlencode({"data": {"wifi":{"ssid":"guest","rssi":"80"}}}) 
'data=%7B%27wifi%27%3A+%7B%27rssi%27%3A+%2780%27%2C+%27ssid%27%3A+%27guest%27%7D%7D' 
+0

हाय ब्रो, मैं ' एम 1 समस्या है, जब मैं हार्ड-कोडेड विधि डेटा का उपयोग सर्वर को भेज सकता हूं, लेकिन जब मैं हार्ड-कोडेड विधि का उपयोग नहीं करता हूं तो मुझे ट्रेसबैक (सबसे हालिया कॉल अंतिम) के रूप में त्रुटि मिलती है: फ़ाइल "scan.py" , रेखा 71, request.add_data में (urllib.urlencode (query_args)) फ़ाइल "/usr/lib/python2.6/urllib.py", लाइन 1254, urlencode उठाने लेखन त्रुटि लेखन त्रुटि में: एक मान्य गैर -स्ट्रिंग अनुक्रम या मैपिंग ऑब्जेक्ट क्या आप मेरी मदद कर सकते हैं आर, मैं उपरोक्त धन्यवाद – Apache

+0

के संदर्भ में संदर्भ के लिए कोड बदलता हूं मुझे कक्षा लोड के जीवनकाल के दौरान केवल एक बार प्रतिक्रिया देने के लिए प्रतिक्रिया पीढ़ी पर कुछ मदद चाहिए –

0

ट्रैस बैक एक ही कोड आप चिपकाया से नहीं आती है।

conn.request("POST","http://202.45.139.58:8080/ppod-web",params,headers) 

यह http.py की लाइन 9 यह कोड आप चिपकाया पर नहीं है लेकिन है:

त्रुटि ट्रैस बैक पर एक लाइन नहीं है।

कृपया वास्तविक कोड पेस्ट करें।

+1

के जीवनकाल के दौरान केवल एक बार प्रतिक्रिया देने के लिए प्रतिक्रिया पीढ़ी पर कुछ मदद की ज़रूरत है। – badp

+0

क्षमा करें nosklo, वास्तव में मैं नमूना कोड के साथ परीक्षण कर रहा हूं, mistakenl मैं अलग से पेस्ट करता हूं, मैंने कोड संपादित किया है, क्या आप http पैरामीटर के लिए http पैरामीटर के लिए उपरोक्त प्रारूप के रूप में मेरी सहायता कर सकते हैं, धन्यवाद – Apache

1

बजाय:

conn = httplib.HTTPConnection("http://223.56.124.58:8080/wireless") 
conn.request("POST", "data", params, headers) 

कोशिश:

conn = httplib.HTTPConnection("223.56.124.58", port=8080) 
conn.request("POST", "/wireless", params, headers) 

नहीं यकीन है कि यह है आपकी सभी समस्याओं का समाधान करेगा, लेकिन कम से कम आपका कोड विधि/कन्स्ट्रक्टर हस्ताक्षर के अनुरूप होगा।

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