从Python向网络服务发送POST请求
我正在尝试向一个RESTful网络服务发送一个POST请求。我需要在请求中传递一些json
数据。下面这个curl命令可以正常工作:
curl --basic -i --data '<json data string here>' -H Content-type:"text/plain" -X POST http://www.test.com/api
我需要一些帮助,想知道如何用Python来发送这个请求。目前我有以下的代码:
import urllib
url='http://www.test.com/api'
params = urllib.urlencode... #What should be here ?
data = urllib.urlopen(url, params).read()
我有以下三个问题:
- 这样发送请求是对的吗?
- 我应该怎么指定参数的值?
- 需要指定内容类型吗?
请帮帮我,谢谢!
6 个回答
1
这个问题是关于如何以“json”格式发送参数的。你需要在请求的头部设置内容类型为 application/json,然后直接发送参数,不需要进行 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)
2
httplib
的文档里有一个示例,展示了如何发送一个POST请求。
>>> 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()