Fragmentat POST în httplib

Am probleme cu un POST folosind httplib. Iată codul:

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-ul care iese este corect. Știu că am început o sesiune de telnet și am scris-o bine. Aici este:

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

Dar răspunsul de la server este "token not found" când scriptul python îl trimite. BTW acest lucru nu funcționează bine cu urllib3 (urllib2 arată aceeași eroare), care utilizează o codificare multipartită, dar vreau să știu ce se întâmplă cu cele de mai sus. Prefer să nu depind de încă un pachet de terțe părți.

0

1 răspunsuri

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

Dar, probabil, aruncarea serverului este " \ n " suplimentară după antetul dvs. de autorizare introdus de base64.encodestring . Ar trebui să utilizați mai degrabă base64.urlsafe_b64encode .

0
adăugat
Am jucat cu Tipul de conținut, dar mi-a greșit să scriu ca tip de conținut ... Codul base64.urlsafe_b64en nu a schimbat nimic.
adăugat autor aterrel, sursa
Python România
Python România
61 participanți

Comunitatea pasionaților de Python din România.

Python Jobs România - Moldova
Python Jobs România - Moldova
30 participanți

Comunitatea Python Română: @python_ro