Python httplib中的断柱

Python httplib中的断柱,python,httplib,Python,Httplib,我在使用httplib的帖子中遇到了问题。代码如下: import base64 import urllib import httplib http = urllib3.PoolManager() head = {"Authorization":"Basic %s" % base64.encodestring("foo:bar")} fields = {"token":"088cfe772ce0b7760186fe4762843a11"} conn = httplib.HTTPSConnec

我在使用httplib的帖子中遇到了问题。代码如下:

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()
出来的帖子是正确的。我知道我启动了一个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显示相同的错误)中确实可以正常工作,但我想知道上面的错误是什么。我宁愿不依赖另一个第三方软件包。

httplib
不会自动添加
内容类型
标题,您必须自己添加它。 (
urlib2
自动将
应用程序/x-www-form-urlencoded
添加为
内容类型


但是可能会使服务器停止运行的是在您的授权头之后附加的“
\n
”,由
base64.encodestring
引入。您最好使用
base64.urlsafe\u b64encode

我确实使用了内容类型,但将其拼错为内容类型。。。base64.urlsafe_b64encode没有更改任何内容。