2010-07-13 18 views
30

मैं wx/पायथन का उपयोग कर एक सुपर-सरल वर्चुअल इन/आउट बोर्ड बनाने की कोशिश कर रहा हूं। मैं सर्वर से मेरी अनुरोध जहाँ मैं डेटा भंडारण हो जाएगा में से एक के लिए जगह में निम्नलिखित कोड मिल गया है:पायथन URLLib/URLLib2 पोस्ट

data = urllib.urlencode({'q': 'Status'}) 

u = urllib2.urlopen('http://myserver/inout-tracker', data) 

for line in u.readlines(): 
    print line 

कुछ भी नहीं विशेष वहाँ चल रहा है। मेरी समस्या यह है कि, मैं दस्तावेज़ों को कैसे पढ़ता हूं, इस पर आधारित है, इसे एक पोस्ट अनुरोध करना चाहिए क्योंकि मैंने डेटा पैरामीटर प्रदान किया है और यह नहीं हो रहा है।

if (!isset($_POST['q'])) { die ('No action specified'); } 

echo $_POST['q']; 

और हर बार मैं अपने अजगर अनुप्रयोग चलाने मैं 'कोई क्रिया निर्दिष्ट नहीं' पाठ मेरे कंसोल को मुद्रित: मुझे लगता है कि यूआरएल के लिए सूचकांक में इस कोड है। मैं अनुरोध ऑब्जेक्ट्स का उपयोग करके इसे लागू करने की कोशिश करने जा रहा हूं क्योंकि मैंने कुछ डेमो देखे हैं जिनमें उनमें शामिल हैं, लेकिन मुझे आश्चर्य है कि कोई मुझे यह समझाने में मदद कर सकता है कि मुझे इस कोड के साथ पोस्ट अनुरोध क्यों नहीं मिला है। धन्यवाद!

- संपादित -

इस कोड को काम और ठीक से अपना वेब पेज के लिए पोस्ट करता है:

data = urllib.urlencode({'q': 'Status'}) 

h = httplib.HTTPConnection('myserver:8080') 

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

h.request('POST', '/inout-tracker/index.php', data, headers) 

r = h.getresponse() 

print r.read() 

मैं अभी भी अनिश्चित हूं क्यों urllib2 पुस्तकालय पोस्ट नहीं है जब मैं डेटा पैरामीटर प्रदान - मेरे लिए दस्तावेज़ संकेत देते हैं कि यह चाहिए।

+0

आप 'urllib2' का उपयोग क्यों नहीं कर रहे हैं? –

+3

मैं हूं। 'Urllib2.urlopen'। मैं केवल पोस्ट डेटा एन्कोड करने के लिए urllib का उपयोग कर रहा हूँ। –

उत्तर

41
u = urllib2.urlopen('http://myserver/inout-tracker', data) 
h.request('POST', '/inout-tracker/index.php', data, headers) 

बिना एक अनुगामी / पथ /inout-tracker का उपयोग index.php लाने नहीं है। इसके बजाय सर्वर 302 पीछे / के साथ संस्करण पर रीडायरेक्ट करेगा।

302 करना आमतौर पर ग्राहकों को एक जीईटी अनुरोध में एक पोस्ट बदलने के लिए कारण बनता है।

+7

यह उत्तर सही था! पाइथन 2.6 urllib2 मॉड्यूल रीडायरेक्ट पर POST से GET तक स्विच करता है। यह न केवल पीछे की ओर फिसलने के साथ होता है, बल्कि उन मामलों के लिए भी हो सकता है जब http को https पर रीडायरेक्ट किया जाता है। – Hazok

+2

आपका 'यू' वहां कुछ भी नहीं करता है। – oneloop

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