POST rompu dans httplib

J'ai des problèmes avec un POST utilisant httplib. Voici le code:

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

Le POST qui sort est correct. Je sais que j'ai démarré une session Telnet et que je l'ai tapée correctement. C'est ici:

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

Mais la réponse du serveur est "token not found" lorsque le script python l'envoie. BTW cela fonctionne bien avec urllib3 (urllib2 montre la même erreur), qui utilise un codage en plusieurs parties, mais je veux savoir ce qui ne va pas avec ce qui précède. Je préférerais ne pas dépendre d'un autre paquet de tiers.

0

1 Réponses

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

Mais ce qui jette probablement le serveur est le \ n 'après votre en-tête d'autorisation, introduit par base64.encodestring . Vous devriez plutôt utiliser base64.urlsafe_b64encode à la place.

0
ajouté
J'ai joué avec Content-Type mais je l'ai mal orthographié Content-type ... Le base64.urlsafe_b64encode n'a rien changé.
ajouté l'auteur aterrel, source