pythonで手を汚そうとしていますが、非常に単純なhttpサーバーを作成しているので、シリアル経由でarduinoにコマンドを送信できます。コマンドをsgouldとして検証し、すべてが正常に機能します。あります。
リモートサーバーやスマートフォンからPOST
リクエストを受け取り、シリアル経由でarduinoでコードを実行するためにHTTPサーバーを使用していますユーザーやユーザー権限レベルなどの優れた機能はほとんどありません。
リクエストが届いたらフィードバックを送りたいと思います。具体的には、エラー、メモ、成功などの実行結果を含むJSONフィードバック。 pythonでディクショナリを作成し、フロントエンドに送り返したいものをすべて追加してから、それをjsonに含めて、応答として送信します。(phpのjson_encode()
のようなもの配列を取り、jsonを出力します)
import SimpleHTTPServer
import SocketServer
import logging
import cgi
import time
import sys
class ServerHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
logging.warning("======= GET STARTED =======")
logging.warning(self.headers)
SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
def do_POST(self):
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
})
if self.check_auth(username, passcode):
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
else:
print cur_time + "failed to login " + form.list[0].name + form.list[0].value
self.send_response(500)
self.send_header('Content-Type', 'application/json')
self.end_headers()
SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
Handler = ServerHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
httpd.serve_forever()
明確なHTTP部分が表示されるように、コードを最小化しようとしました。
ご覧のとおり、ヘッダーと応答タイプを送信しています(ログインが成功した場合は200、ログインが失敗した場合は500)
エンコードしたいものを辞書に渡す
要旨としての完全なコード: https://Gist.github.com/FlevasGR/1170d2ea47d851bfe024
これはあなたが今まで見た中で最高ではないかもしれませんが、Python
で書くのは初めてです:)
Pythonの標準ライブラリのjson
モジュールは、まさにあなたが求めている機能を提供します。モジュールの上部にある_import json
_とjson.dumps(whatever)
を使用して、応答で送信するjson
文字列を取得します。
ちなみに、認証の失敗は間違いなくnot500エラーです:500は「サーバーエラー」を意味し、サーバーは不正を拒否する際にエラーをまったく発生させませんユーザー!-)403(「禁止」)またはその他のセキュリティ関連の400コードを使用して、許可されていないユーザーを拒否します http://en.wikipedia.org/wiki/HTTP_4 およびより一般的には http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error 詳細。
この後者のビットはあなたが求めているものではありませんが、HTTPステータスコードのセマンティックの整合性を維持することは重要です-今日のWebでは、HTTPクライアント、サーバー、プロキシ、キャッシュなどのメンテナに頭痛を与えるほど頻繁に違反しています。 ..標準に固執することで、難しくなく、彼らの生活をより簡単にしましょう!_)