Httplib में टूटा पोस्ट

मुझे httplib का उपयोग कर एक पोस्ट के साथ परेशानी हो रही है। यहां कोड है:

import base64
import urllib
import httplib

http = urllib3.PoolManager()
head = {"Authorization":"Basic %s" % base64.encodestring("foo:bar")}
fields = {"token":"088cfe772ce0b7760186fe4762843a11"}

conn = httplib.HTTPSConnection("foundation.iplantc.org")
conn.set_debuglevel(2)
conn.request('POST', '/auth-v1/renew', urllib.urlencode(fields), head)
print conn.getresponse().read()
conn.close()

जो पोस्ट आता है वह सही है। मुझे पता है कि मैंने एक टेलनेट सत्र शुरू किया और इसे ठीक काम में टाइप किया। यह रहा:

'POST /auth-v1/renew HTTP/1.1\r\nHost: foundation.iplantc.org\r\nAccept-Encoding: identity\r\nContent-Length: 38\r\nAuthorization: Basic YXRlcnJlbDpvTnl12aesf==\n\r\n\r\ntoken=088cfe772ce0b7760186fe4762843a11'

लेकिन जब पाइथन लिपि भेजता है तो सर्वर से प्रतिक्रिया "टोकन नहीं मिली" है। बीटीडब्लू यह urllib3 के साथ ठीक काम करता है (urllib2 एक ही त्रुटि दिखाता है), जो एक मल्टीपार्ट एन्कोडिंग का उपयोग करता है, लेकिन मैं जानना चाहता हूं कि उपरोक्त के साथ क्या गलत हो रहा है। मैं अभी तक एक और तीसरे पक्ष के पैकेज पर निर्भर नहीं होगा।

0
जोड़ा संपादित
विचारों: 1

1 उत्तर

httplib doesn't automatically add a Content-Type header, you have to add it yourself. (urllib2 automatically adds application/x-www-form-urlencoded as Content-Type).

लेकिन संभवतः सर्वर को फेंकना आपके प्राधिकरण शीर्षलेख के बाद base64.encodestring द्वारा पेश किया गया अतिरिक्त ' \ n ' है। आपको इसके बजाय base64.urlsafe_b64encode का बेहतर उपयोग करना चाहिए।

0
जोड़ा
मैंने सामग्री-प्रकार के साथ खेलना शुरू किया था लेकिन इसे सामग्री-प्रकार के रूप में गलत वर्तनी थी ... base64.urlsafe_b64encode ने कुछ भी नहीं बदला।
जोड़ा लेखक aterrel, स्रोत