0

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

4

1 に答える 1

2

httplibContent-Typeヘッダーは自動的に追加されません。自分で追加する必要があります。(としてurllib2自動的に追加application/x-www-form-urlencodedされますContent-Type)。

しかし、おそらくサーバーをスローしているのは、\nによって導入された認証ヘッダーの後に追加された''base64.encodestringです。base64.urlsafe_b64encode代わりに使用する方がよいでしょう。

于 2012-05-24T16:38:43.060 に答える