Python - 发出HTTP POST请求,为什么我的有效负载以表格形式结束?

时间:2015-03-06 15:58:09

标签: python urllib2

我正在使用urlib2和http://httpbin.org/post(/get)来测试我的客户端。

当我进入模式时

values = [('shelf' , 'XXXX'),('who' , 'YYYYY'])]
request_url = '%s?%s' %('http://httpbin.org/get, urllib.urlencode(values))
request = urllib2.Request(request_url)
print urllib2.urlopen(request_url).read()

我得到了正确传递的args,他们确实出现在args中。

当我发布thoguh

values = [('shelf' , 'XXXX'),('who' , 'YYYYY'])]
request_url = 'http://httpbin.org/post'
request = urllib2.Request(to_url)
request.add_header('Content-Type', 'application/text')  
return urllib2.urlopen(request, urllib.urlencode(values))
服务器端的

是空的,它们最终出现在数据字段中:

{
    "args": {},
    "files": {},
    "data": {
        "shelf": "XXXX",
        "who": "YYYY"
      ....

在服务器端,无论我通过args使用什么,我都想抓住它们。 这甚至可能吗? 我需要这个的原因是在服务器端我使用的是http://twistedmatrix.com/documents/15.0.0/api/twisted.web.http.Request.html#process,它似乎只是暴露了args。

干杯

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您希望POST到服务器的参数作为查询字符串的一部分传入。这很简单:只需在request_url中添加它们,就像在GET请求中一样。这是POST片段中的一个(有些修复,现在实际上是功能性和自包含的)工作示例:

import urllib
import urllib2

values = [('shelf' , 'XXXX'),('who' , 'YYYYY')]
request_url = '%s?%s' % ('http://httpbin.org/post', urllib.urlencode(values))
request = urllib2.Request(request_url)
request.add_header('Content-Type', 'application/text')
req = urllib2.urlopen(request, urllib.urlencode(values))
print req.read()

注意,现在“架子”和“谁”在查询字符串和POST正文中的两个位置发送到您的服务器。这可能是也可能不是你真正想要的。如果您确实不需要在POST正文中发送这些变量,则可以将req = ...行更改为req = urllib2.urlopen(request, '')