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 显示相同的错误),它使用多部分编码,但我想知道上面有什么问题。我宁愿不依赖另一个 3rd 方包。

4

1 回答 1

2

httplib不会自动添加Content-Type标题,您必须自己添加。(urllib2自动添加application/x-www-form-urlencodedContent-Type)。

但是可能使服务器关闭的是\n您的授权标头之后的附加“ ”,由base64.encodestring. 你应该更好地使用base64.urlsafe_b64encode

于 2012-05-24T16:38:43.060 回答