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

Python HTTPS服务器对接curl时出现SSL错误56和35的问题排查

问题分析与修复方案

虚拟机内curl报错(错误码56)的原因

你的服务器发送完响应内容后,没有遵循HTTP规范告知客户端响应体的长度。BaseHTTPRequestHandler仅调用end_headers()并写入响应体后,服务器会直接关闭TCP连接,而curl会持续等待更多数据,直到连接意外中断,因此出现unexpected eof while reading错误——实际上响应内容已经成功接收,但连接关闭的方式不符合预期。

主机访问报错(错误码35/34)的原因

你的HTTPS服务器绑定的地址是127.0.0.1,这意味着它只接受虚拟机本地的请求。VirtualBox的端口转发虽然把主机443端口的流量转发到虚拟机4443端口,但虚拟机的服务仅监听localhost,外部(包括主机)的请求无法被服务器接收,导致SSL握手流程还未完成就失败,因此出现未知SSL协议错误或错误码34。

修复步骤

  1. 修改服务器监听地址
    将服务器绑定的地址从127.0.0.1改为0.0.0.0,让服务器监听虚拟机的所有网络接口,这样主机通过端口转发的请求才能被接收:

    httpd = HTTPServer(('0.0.0.0', 4443), SimpleHTTPRequestHandler)
    
  2. 完善HTTP响应头
    在do_GET方法中添加Content-Length头,明确告知客户端响应体的长度,避免curl因等待更多数据而报错:

    def do_GET(self):
        response = b'Hello, secure world!\n'
        self.send_response(200)
        self.send_header('Content-Length', str(len(response)))
        self.end_headers()
        self.wfile.write(response)
    

验证效果

  • 虚拟机内执行curl -k https://localhost:4443,会正常返回响应且无报错。
  • 主机执行curl -k https://127.0.0.1或通过实际域名访问,能成功完成SSL握手并收到响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:25:35