2011-12-26 8 views
18

とJSONリクエストを送信:は、私は、Webサービスへの新たなんだとPythonスクリプトを使用して、次のJSONベースのリクエストを送信しようとしていますPythonの

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データを追加しますか?

ありがとうございました!

答えて

26

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) 

あなたは、その後、HTTPステータスコードを取得するためにコンテンツをrを検査することができ、など

+0

ありがとう!実際のget要求文字列を出力するためのメソッドがありますか?サーバーは「valid write apikey required」で応答していますが、ブラウザで動作する同じキーを使用しています。 –

+0

はい、イベントフックを使用できます。実際にリクエストのドキュメントには、リクエストを送信する前にURLを出力するだけの例が含まれています。http://docs.python-requests.org/ja/latest/user/advanced/#event-hooks – simao

+0

こんにちはシマオ、引数を見る能力はありますが、サーバーに送信されている実際の完全なリクエスト文字列を見るためには何が必要ですか?たとえば、http:// myserver/emoncms2/api/post?apikey = xxxxxxxxxxxxx&json = {power :290.4、temperature:19.4} –

1

たぶん、問題はそのjson.dumpsです"を入れ、jsonにURLを入れてください。"がありません。たとえば :

data = {'temperature':'24.3'} 
print json.dumps(data) 

プリント:

{"temperature": "24.3"}

及びません:あなたはあなたのURLに入れるよう

{temperature: 24.3}

(発生しやすいトラブルです)これを解決する一つの方法が行うことです。あなたの応答のための

json.dumps(data).replace('"', '') 
+0

ありがとうございます。私はキーと値の周りの引用符でブラウザでリクエストを送信するテストをしましたが、それでもOKです。主な問題私は、apikeyデータがPythonスクリプトから正しく送信されていないということがあるようです。 –

+0

コードを次のように変更するとどうなりますか: params = urllib.urlencode({'apikey': 'xxxxxxx'、 'json':{'temperature': '24.3'}})\ urllib2.urlopen(host + '?' + params) ' – Guy

関連する問題