كسر POST في httplib

أواجه مشكلة مع POST باستخدام 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 الذي يخرج هو الصحيح. وأنا أعلم أنني بدأت جلسة Telnet وكتابتها بشكل جيد. ها هو:

'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'

لكن الرد من الخادم هو "الرمز غير موجود" عندما يرسله البرنامج النصي python. راجع للشغل هذا لا يعمل بشكل جيد مع urllib3 (يظهر urllib2 نفس الخطأ) ، والذي يستخدم ترميز متعدد الأجزاء ، ولكن أريد أن أعرف ما هو الخطأ في ما ورد أعلاه. أفضل عدم الاعتماد على حزمة طرف ثالث أخرى.

0

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).

ولكن ربما يتم التخلص من الخادم هو ' \ n الإضافية بعد رأس التخويل الخاص بك ، الذي قدمته base64.encodestring . يجب عليك استخدام base64.urlsafe_b64encode بشكل أفضل بدلاً من ذلك.

0
وأضاف
لقد لعبت مع نوع المحتوى ولكن كان خطأ إملائي أنها نوع المحتوى ... لم يغير base64.urlsafe_b64encode أي شيء.
وأضاف المؤلف aterrel, مصدر