【发布时间】:2015-01-30 16:36:38
【问题描述】:
我在做什么
我试图用 python 弄脏我的手,并且我制作了一个非常简单的 http 服务器,这样我就可以通过串行向我的 arduino 发送命令。我正在验证命令,一切正常。
概念
我使用 HTTP 服务器来接收来自远程计算机和智能手机的 POST 请求,并通过串行使用我的 arduino 执行代码。
它几乎没有用户和用户权限级别等很酷的功能。
问题
我想在请求到达时提供反馈。特别是带有执行结果的 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 表示登录失败)
我需要完成的目标
-
在字典中传递我想要编码的东西
- 示例:out = {'status': 'ok', 'executed': 'yes'}
- 用json响应
作为要点的完整代码:https://gist.github.com/FlevasGR/1170d2ea47d851bfe024
我知道这可能不是你一生中见过的最好的,但这是我第一次在Python 上写信:)
【问题讨论】:
标签: python json http http-headers