使用Python发送JSON请求

Don*_*l M 21 python json

我是Web服务的新手,我正在尝试使用python脚本发送以下基于JSON的请求:

http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx&json={power:290.4,temperature:19.4}
Run Code Online (Sandbox Code Playgroud)

如果我将上述内容粘贴到浏览器中,它会按预期工作.但是,我很难从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()
Run Code Online (Sandbox Code Playgroud)

如何将apikey数据添加到请求中?

谢谢!

sim*_*mao 34

您可以使用请求,而不是使用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)
Run Code Online (Sandbox Code Playgroud)

然后,您可以检查r以获取http状态代码,内容等


leb*_*cht 7

尽管这并不能完全回答 OP 的问题,但这里应该提到的是,requests模块有一个json可以像这样使用的选项:

import requests

requests.post(
    'http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx',
    json={"temperature": "24.3"}
)

Run Code Online (Sandbox Code Playgroud)

这相当于卷曲:

curl 'http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx' \
    -H 'Content-Type: application/json' \
    --data-binary '{"temperature":"24.3"}'

Run Code Online (Sandbox Code Playgroud)