You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3读取HTTP请求数据:编写回显服务器遇readall属性报错

解决Python回显HTTP服务器的请求数据读取问题

嘿,我来帮你搞定这个问题!你遇到的'_io.BufferedReader' object has no attribute 'readall'错误,是因为Python的BufferedReader对象根本没有readall()方法——你搞混了方法名啦,正确的应该是read(),而且还要把读取到的字节数据转成字符串才能实现回显功能。

核心修改点

  • 用self.rfile.read()替代readall():无参数的read()会读取流中所有剩余字节,完全符合你想要的“读取全部请求数据”的需求。
  • 字节转字符串:读取到的原始数据是字节对象,需要用decode('utf-8')解码成UTF-8编码的字符串,方便打印和返回给客户端。
  • 回显时重新编码:wfile.write()要求写入字节,所以要把字符串再用encode('utf-8')转回字节。

修改后的完整代码

#!/usr/bin/env python
from http.server import HTTPServer, BaseHTTPRequestHandler

class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 读取所有请求数据并解码为字符串
        request_data = self.rfile.read().decode('utf-8')
        print('Received request data:\n', request_data)
        
        # 发送响应头
        self.send_response(200)
        self.send_header('Content-Type', 'text/plain; charset=utf-8')
        self.end_headers()
        
        # 将原始请求数据回显给客户端
        self.wfile.write(request_data.encode('utf-8'))
        return

def server_start():
    address = ('', 1992)
    httpd = HTTPServer(address, RequestHandler)
    print('Server running on port 1992...')
    httpd.serve_forever()

server_start()

额外优化说明

我还帮你调整了Content-Type为text/plain; charset=utf-8,这样客户端能正确识别回显的文本内容,避免出现乱码问题。现在运行这个服务器,当你用浏览器或者curl访问http://localhost:1992时,就能看到完整的原始请求数据被回显回来啦!

内容的提问来源于stack exchange,提问作者wolfram77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:21:23