gpt4 book ai didi

Python HTTP 服务器发送 JSON 响应

转载 作者:太空狗 更新时间:2023-10-29 18:05:57 33 4
gpt4 key购买 nike

我在做什么

我试图用 python 弄脏我的手,我正在制作一个非常简单的 http 服务器,这样我就可以通过串行向我的 arduino 发送命令。我正在按照我应该的方式验证命令,一切正常。

概念

我正在使用 HTTP 服务器接收来自远程计算机和智能手机的 POST 请求,并通过 Serial 使用我的 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 部分。

如您所见,我发送了 header 和响应类型(成功登录为 200,登录失败为 500)

我需要完成的目标

作为要点的完整代码:https://gist.github.com/FlevasGR/1170d2ea47d851bfe024

我知道这可能不是你一生中见过的最好的,但这是我第一次用 Python 编写 :)

最佳答案

Python 标准库的 json 模块提供了您所要求的功能。 import json 在你的模块的顶部和 json.dumps(whatever) 来获取 json 字符串以在响应中发送。

作为旁注,授权失败绝对不是 500 错误:500 表示“服务器错误”,服务器在拒绝未授权用户时绝对没有错误!-) 使用 403 ( “禁止”)或其他与安全相关的 400 代码以拒绝未经授权的用户——参见 http://en.wikipedia.org/wiki/HTTP_403更一般地说 http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error了解更多。

后一点不是您要问的,但维护 HTTP 状态代码的语义完整性很重要——如今在网络上经常违反它,这让 HTTP 客户端、服务器、代理、缓存的维护者头疼, &c...让我们坚持标准,让他们的生活更轻松,而不是更艰难!_)

关于Python HTTP 服务器发送 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28240464/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com