Saya baru mengenal layanan web dan mencoba mengirim permintaan berbasis JSON berikut menggunakan skrip python:
http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx&json={power:290.4,temperature:19.4}
Jika saya menempelkan data di atas ke dalam browser, maka akan berfungsi seperti yang diharapkan. Namun, saya kesulitan untuk mengirim permintaan dari Python. Berikut ini adalah apa yang saya coba:
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()
Bagaimana cara menambahkan data apikey ke dalam permintaan?
Terima kasih!
Daripada menggunakan urllib2, Anda dapat menggunakan request. Lib python baru ini ditulis dengan sangat baik dan lebih mudah dan lebih intuitif untuk digunakan.
Untuk mengirim data json Anda, Anda dapat menggunakan sesuatu seperti kode berikut:
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)
Anda kemudian dapat memeriksa r
untuk mendapatkan kode status http, konten, dll
Mungkin masalahnya adalah json.dumps
menempatkan "
dan di dalam json yang Anda masukkan ke dalam url tidak ada "
s.
Sebagai contoh:
data = {'temperature':'24.3'}
print json.dumps(data)
mencetak:
{"temperature": "24.3"}
dan bukan:
{suhu: 24.3}
seperti yang Anda masukkan ke dalam url Anda.
Salah satu cara untuk menyelesaikan ini (yang rawan masalah) adalah dengan melakukan:
json.dumps(data).replace('"', '')
Meskipun hal ini tidak menjawab pertanyaan OP secara tepat, harus disebutkan di sini bahwa modul requests
memiliki opsi json
yang dapat digunakan seperti ini:
import permintaan
requests.post(
'http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx',
json={"temperature": "24.3"}
)
```
yang akan setara dengan curl:
```bash
curl 'http://myserver/emoncms2/api/post?apikey=xxxxxxxxxxxxx' \
-H 'Content-Type: application/json' \
--data-binary '{&"temperature":"24.3"}'
```