Отправка запроса JSON с помощью Python
Я новичок в веб-сервисах и пытаюсь отправить следующий JSON-запрос с помощью python script:
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 в запрос?
Спасибо!
Ответы
Ответ 1
Вместо использования urllib2 вы можете использовать requests. Эта новая библиотека 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, контент и т.д.
Ответ 2
Может быть, проблема в том, что json.dumps
ставит "
, а в json вы помещаете в url нет "
s.
Например:
data = {'temperature':'24.3'}
print json.dumps(data)
печатает:
{"temperature": "24.3"}
и не:
{temperature: 24.3}
как вы положили в свой url.
Один из способов решения этой проблемы (с точки зрения проблем) - сделать:
json.dumps(data).replace('"', '')
Ответ 3
Хотя это не дает точного ответа на вопрос 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"}'
Ответ 4
import requests
url = 'http://iizuka.cs.tsukuba.ac.jp/projects/colorization/web/'
files = {'file': ("my_img_path/myImage.jpeg", open('my_img_path/myImage.jpeg', 'rb'),'image/jpg')}
r = requests.post(url, files=files)