httplibを使用したPOSTで問題が発生しました。コードは次のとおりです。
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は同じエラーを示しています)では正常に機能しますが、上記の何が問題になっているのかを知りたいです。私はむしろ別のサードパーティパッケージに依存したくありません。