我正在使用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。
干杯
答案 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, '')
。