【问题标题】:Python HTTPServer: Reponse not getting sent (Looking to return JSON)Python HTTP 服务器:未发送响应(希望返回 JSON)
【发布时间】:2021-01-09 23:15:43
【问题描述】:

嘿,我正在使用 Python 开发 Basic 服务器,现在我正在测试如何返回 JSON 数据,但现在我无法返回该 JSON 数据。

这就是我尝试将 JSON 发送回客户端的方式:

response= {
   "name":'junior',
   "name":'junior'
}
self.send_response(200)
self.wfile.write(bytes(json.dumps(response, ensure_ascii=False), 'utf-8'))
self.send_header('Content-type', 'application/json')
self.end_headers()

以下是完整的源代码:

import ast
import json
from http.server import HTTPServer, BaseHTTPRequestHandler
from http import HTTPStatus

class ServiceHandler(BaseHTTPRequestHandler):
    
  def do_GET(self):
    print(self.path)


  def do_POST(self):
    content_len = int(self.headers.get('Content-Length'))
    post_body = self.rfile.read(content_len)  
    body = ast.literal_eval(post_body.decode("utf-8"))
    response= {
       "name":'junior',
       "name":'junior'
    }
    self.send_response(200)
    self.wfile.write(bytes(json.dumps(response, ensure_ascii=False), 'utf-8'))
    self.send_header('Content-type', 'application/json')
    self.end_headers()
        
   
#Server Initialization
server = HTTPServer(('127.0.0.1',8080), ServiceHandler)
server.serve_forever()

我能否就如何返回 JSON 数据获得一些帮助

【问题讨论】:

  • 当前行为和预期行为是什么?
  • 当前行为不是响应消息正在发送回客户端,预期行为是我将 json 对象发送回客户端
  • 好的,所以我不太确定 stdlib http 服务器是如何工作的,但我很确定应该在发送标头后发送正文
  • 哦,是的,我的错,没有发现,但是问题仍然存在,没有 json 被返回

标签: python json


【解决方案1】:

像这样在正文之前发送标题:

self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
self.wfile.write(bytes(json.dumps(response, ensure_ascii=False), 'utf-8'))

【讨论】:

    【解决方案2】:

    标头必须在数据之前发送,但您如何要求 POST 请求?这是一个仅使用 GET 的示例:

    import json
    from http.server import HTTPServer, BaseHTTPRequestHandler
    
    class ServiceHandler(BaseHTTPRequestHandler):
    
        def do_GET(self):
            response= {
               "name":'junior',
               "name2":'junior'
            }
            self.send_response(200)
            self.send_header('Content-type', 'application/json')
            data = json.dumps(response).encode()
            self.end_headers()
            self.wfile.write(json.dumps(response).encode())
    
    server = HTTPServer(('',8080), ServiceHandler)
    server.serve_forever()
    
    >>> print(requests.get('http://127.0.0.1:8080').json())
    {'name': 'junior', 'name2': 'junior'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多