Подтвердить что ты не робот

Отправка запроса 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 в запрос?

Спасибо!

4b9b3361

Ответ 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)