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

Python用http.client/http.server无Socket实现客户端向服务端传字符串

实现方案

核心思路是客户端直接通过POST请求将目标字符串放在请求体中发送给服务端,服务端直接解析请求体获取字符串后处理返回即可,无需两次交互。

服务端实现(基于http.server)

继承BaseHTTPRequestHandler重写do_POST方法,直接读取请求体内容:

from http.server import BaseHTTPRequestHandler, HTTPServer
# 此处引入你已有的scraper处理逻辑
from your_module import scraper

class RequestHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        # 读取请求体长度
        content_length = int(self.headers['Content-Length'])
        # 读取请求体内容,解码为字符串
        target_str = self.rfile.read(content_length).decode('utf-8')
        
        # 调用原有scraper逻辑处理字符串
        result = scraper.extract(target_str)
        
        # 构造响应返回
        self.send_response(200)
        self.send_header('Content-type', 'text/plain; charset=utf-8')
        self.end_headers()
        self.wfile.write(result.encode('utf-8'))

if __name__ == "__main__":
    server_addr = ('', 8000)
    httpd = HTTPServer(server_addr, RequestHandler)
    print("服务端已启动,监听8000端口")
    httpd.serve_forever()

客户端实现(基于http.client)

发起POST请求时直接携带目标字符串:

import http.client

# 要发送给服务端的目标字符串
send_str = "你需要传递的字符串内容"

conn = http.client.HTTPConnection("localhost", 8000)
# 发起POST请求,请求体为目标字符串
conn.request("POST", "/", body=send_str.encode('utf-8'), headers={"Content-Type": "text/plain"})

# 获取响应结果
resp = conn.getresponse()
result = resp.read().decode('utf-8')
print("服务端返回结果:", result)
conn.close()

核心调整说明

去掉原有服务端主动索要字符串的交互逻辑,将原来的两次请求交互合并为单次POST请求:客户端发送请求时直接携带参数,服务端直接读取处理返回即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:15:03