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
相关产品推荐
相关产品推荐

