मैं वर्तमान में कोड के एक टुकड़े के साथ काम कर रहा हूं जिसे किसी और ने लिखा है। सर्वर पर अनुरोध करने के लिए यह httplib
का उपयोग करता है। इसमें एक सही प्रारूप में प्रदान किया गया सभी डेटा है - उदाहरण के लिए संदेश निकाय, हेडर वैल्यू इत्यादि।पायथन हॉस्पिटलप्लिब और पोस्ट
समस्या यह है कि हर बार जब यह POST अनुरोध भेजने का प्रयास करता है, तो डेटा वहां होता है - मैं इसे देख सकता हूं ग्राहक पक्ष, हालांकि सर्वर के लिए कुछ भी नहीं आता है। मैंने पुस्तकालय विनिर्देश के माध्यम से पढ़ा है और उपयोग सही लगता है।
निकाले पुस्तकालय कॉल जाना इस प्रकार है:
import httplib
conn = httplib.HTTPConnection('monkeylabs.pl', 80)
conn.connect()
request = conn.putrequest('POST', '/api/snippet/')
headers = {}
headers['Content-Type'] = 'application/json'
headers['User-Agent'] = 'Envjs/1.618 (SpyderMonkey; U; Linux x86_64 2.6.38-10-generic; pl_PL.utf8; rv:2.7.1) Resig/20070309 PilotFish/1.3.pre03'
headers['Accept'] = '*/*'
for k in headers:
conn.putheader(k, headers[k])
conn.endheaders()
conn.send('[{"id":"route"}]')
resp = conn.getresponse()
print resp.status
print resp.reason
print resp.read()
conn.close()
यह कुछ ज्ञात समस्या है, या क्या है? मैं पायथन 2.7 का उपयोग कर रहा हूँ। Sureplib के संस्करण की जांच कैसे करें सुनिश्चित नहीं है।
कृपया किसी अन्य चीज़ के लिए fansplib का आदान-प्रदान करने का सुझाव न दें जब तक कि यह वास्तव में कुछ समान नहीं है (httplib2 शायद)। जैसा कि मैंने कहा, कोड मेरा नहीं है और यह अभी ऊपर पोस्ट किए गए कार्यों की तुलना में बहुत अधिक मात्रा में आता है। इसे पुन: सक्रिय करने से एक बड़ी समस्या होगी। मुझे किसी भी विश्वसनीय कामकाज में दिलचस्पी है।
संपादित
डिबग आउटपुट:
send: 'POST /api/snippet/ HTTP/1.1\r\nHost: monkeylabs.pl\r\nAccept-Encoding: identity\r\nContent-Type: application/json\r\nAccept: */*\r\nUser-Agent: Envjs/1.618 (SpyderMonkey; U; Linux x86_64 2.6.38-10-generic; pl_PL.utf8; rv:2.7.1) Resig/20070309 PilotFish/1.3.pre03\r\n\r\n[{"id":"route"}]'
reply: 'HTTP/1.0 201 CREATED\r\n'
header: Date: Fri, 10 Jun 2011 23:54:00 GMT
header: Server: WSGIServer/0.1 Python/2.7.1+
header: Vary: Cookie
header: Content-Type: application/json
header: Content-Length: 0
201
CREATED
ध्यान दें कि उत्तर वास्तव में सर्वर जबाब, नहीं अनुरोध ही है, जो इस मामले में रिक्त है के बारे में बातचीत के बाद जानकारी।
[11/Jun/2011 01:54:00] "POST /api/snippet/ HTTP/1.1" 201 0
और उन तीन लाइनों:
से बाहर``
<QueryDict: {}>
<QueryDict: {}>
:
print '`%s`' % request.raw_post_data
print request.GET
print request.POST
पर प्राथमिक कारण है कि अनुरोध शरीर में ही खाली हो गया है मैं एक लॉग हो रही द्वारा निरीक्षण कर सकते है Django सर्वर। तो ऐसा लगता है कि यह शरीर भेजने का प्रयास करता है लेकिन इसे अंत में नहीं भेजता है।
संपादित करें (2)
ठीक है, मैं एक डंप ले लिया और यह वास्तव में मुझे बताया संदेश ब्राउज़र से भेजा में एक अतिरिक्त पैरामीटर 'सामग्री-लंबाई' कहा जाता है, जिसमें हटा दिया गया है है कि वहाँ पुस्तकालय का नियमित उपयोग। मुझे मूर्ख।
, अगर आपको लगता है कि आप इस बात में बहुत कुछ डिबगिंग हो जाएगा, (स्थापित [Wireshark] http://www.wireshark.org/:
अपने कोड को यह जोड़े
for
पाश ऊपर) और तार पर वास्तव में क्या चल रहा है पर जासूसी करने के लिए इसका इस्तेमाल करें। – Darienधन्यवाद, मैं शुरुआत में एक गैर-आस्तिक था लेकिन वास्तव में मुझे समाधान के लिए प्रेरित किया। धन्यवाद फिर से – julkiewicz
सर्वर में है: response.set_header ('एक्सेस-कंट्रोल-अनुमति-उत्पत्ति', '*') ???? –