2011-08-19 161 views
3

我想发送一个POST请求到一个restful webservice。我需要通过一些json在request.It的工作原理与curl命令如下从python发送POST请求到webservice

curl --basic -i --data '<json data string here>' -H Content-type:"text/plain" -X POST http://www.test.com/api 

我需要做在Python上述要求一些帮助。要发送蟒蛇这个POST请求我有下面的代码至今:

import urllib 
url='http://www.test.com/api' 
params = urllib.urlencode... #What should be here ? 
data = urllib.urlopen(url, params).read() 

我有以下三个问题:

  1. 这是送resuest的正确方法?
  2. 我应该如何指定参数值?
  3. 是否需要指定内容类型?

请帮助 谢谢

回答

1
  1. 构建你要发送的POST请求的数据的dict
  2. urlencode字典得到一个字符串。
  3. urlopen您需要的URL,将可选的data参数传递为您编码的POST数据。
+0

感谢您的答复。我有数据字典。你能举个下一步的例子,例如urlencode吗? – Joe

+0

@Joe:你调用函数'urlencode'并将它的数据字典作为参数传递给它!它能有多难? – katrielalex

+0

@Joe:'urlencode(my_data)' – katrielalex

2

httplib的文档有发送POST请求的example

>>> import httplib, urllib 
>>> params = urllib.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'}) 
>>> headers = {"Content-type": "application/x-www-form-urlencoded", 
...   "Accept": "text/plain"} 
>>> conn = httplib.HTTPConnection("bugs.python.org") 
>>> conn.request("POST", "", params, headers) 
>>> response = conn.getresponse() 
>>> print response.status, response.reason 
302 Found 
>>> data = response.read() 
>>> data 
'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>' 
>>> conn.close() 
1

与发送的参数为“JSON”的问题涉及.. 您需要设置内容类型应用在页眉/ JSON,然后发送paramters没有URL编码..

前:

url = "someUrl" 

data = { "data":"ur data"} 


header = {"Content-Type":"application/json","User-Agent":"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"} 

#lets use httplib2 

import httplib2 
http = httplib2.Http() 

response, send = http.request(url,"POST",headers=header,body=data) 
1

你不需要urllib.urlencode()如果Content-Type没有application/x-www-form-urlencoded

import json, urllib2 

data = {"some": "json", "d": ["a", "ta"]} 
req = urllib2.Request("http://www.test.com/api", data=json.dumps(data), 
         headers={"Content-Type": "application/json"}) 
print urllib2.urlopen(req).read() 
-1

以下是关于json POST请求的示例代码片段。结果将打印在您的终端中。

import urllib, urllib2 

url = 'http://www.test.com/api' 
values = dict(data=json.dumps({"jsonkey2": "jsonvalue2", "jsonkey2": "jsonvalue2"})) 
data = urllib.urlencode(values) 
req = urllib2.Request(url, data) 
rsp = urllib2.urlopen(req) 
content = rsp.read() 

print content 
+0

解释你做了什么 – CodeGodie