我在使用twisted.web.client.Agent ...
时遇到了一些麻烦我认为我的帖子请求中的字符串数据没有正确格式化。我正在尝试做一些类似于这个同步代码的事情:
from urllib import urlencode
import urllib2
page = 'http://example.com/'
id_string = 'this:is,my:id:string'
req = urllib2.Request(page, data=urlencode({'id': id_string})) # urlencode call returns 'id=this%3Ais%2Cmy%3Aid%3Astring'
resp = urllib2.urlopen(req)
以下是我现在正在构建我的代理请求的方式:
from urllib import urlencode
from StringIO import StringIO
page = 'http://example.com/'
id_string = 'my:id_string'
head = {'User-Agent': ['user agent goes here']}
data = urlencode({'id': id_string})
request = agent.request('POST', page, Headers(head), FileBodyProducer(StringIO(data)))
request.addCallback(foo)
由于我得到的HTTP响应(null JSON字符串),我开始怀疑在POST请求中没有正确编码id,但我不确定我可以做些什么呢。使用urlencode与Agent.request调用有效吗?还有另一种方法我应该编码这些东西吗?
编辑:某些IRC人员提出问题可能源于我没有发送表明数据是在url字符串中编码的标头信息。我对这种东西知之甚少......有人能指出我正确的方向吗?答案 0 :(得分:3)
根据要求,这是我的回答:
带有正文的HTTP请求应该设置Content-Type标头(告诉服务器如何解释正文中的字节);在这种情况下,似乎服务器期望URL编码的数据,就像Web浏览器在填写表单时发送的那样。
urllib2.Request
显然默认为您的内容类型,但扭曲的库似乎需要手动设置它。在这种情况下,您需要的内容类型为application/x-www-form-urlencoded
。