我是Web服务的新手,正在尝试使用python脚本发送以下基于JSON的请求:
http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx&json={power:290.4,temperature:19.4}
如果我将上述内容粘贴到浏览器中,它会按预期工作。但是,我很难从Python发送请求。以下是我正在尝试的内容:
import json
import urllib2
data = {'temperature':'24.3'}
data_json = json.dumps(data)
host = "http://myserver/emoncms2/api/post"
req = urllib2.Request(host, 'GET', data_json, {'content-type': 'application/json'})
response_stream = urllib2.urlopen(req)
json_response = response_stream.read()
如何将apikey数据添加到请求中?
谢谢!
答案 0 :(得分:34)
您可以使用requests,而不是使用urllib2。这个新的python库写得非常好,使用起来更简单,更直观。
要发送您的json数据,您可以使用类似下面的代码:
import json
import requests
data = {'temperature':'24.3'}
data_json = json.dumps(data)
payload = {'json_payload': data_json, 'apikey': 'YOUR_API_KEY_HERE'}
r = requests.get('http://myserver/emoncms2/api/post', data=payload)
然后,您可以检查r
以获取http状态代码,内容等
答案 1 :(得分:2)
问题可能是json.dumps
置"
,而你在网址中放入的json中没有"
。
例如:
data = {'temperature':'24.3'}
print json.dumps(data)
打印:
{"temperature": "24.3"}
而不是:
{temperature: 24.3}
解决此问题的一种方法(容易出错)是:
json.dumps(data).replace('"', '')
答案 2 :(得分:0)
即使这不能完全回答OP的问题,在这里也应该提到requests
模块有一个json
选项,可以这样使用:
import requests
requests.post(
'http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx',
json={"temperature": "24.3"}
)
相当于卷曲:
curl 'http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
--data-binary '{"temperature":"24.3"}'