如何搭建可接收curl传输文件的Python服务器?
实现思路与代码示例
首先明确:pycurl是Python的curl客户端库,主要用于发送HTTP请求,做服务器端接收文件并不合适,推荐用以下两种更直接的方案:
服务器端实现方向
1. 原生http.server实现(无需额外依赖)
用Python标准库搭建极简服务器,自定义请求处理器处理POST请求并保存文件:
from http.server import BaseHTTPRequestHandler, HTTPServer class FileUploadHandler(BaseHTTPRequestHandler): def do_POST(self): # 读取请求中的文件内容 content_len = int(self.headers.get('Content-Length', 0)) file_data = self.rfile.read(content_len) # 保存文件到本地(可自定义路径/文件名) with open('./received_file', 'wb') as f: f.write(file_data) # 返回成功响应 self.send_response(200) self.end_headers() self.wfile.write(b'File saved') def run_server(port=8000): server = HTTPServer(('', port), FileUploadHandler) print(f'Server listening on port {port}') try: server.serve_forever() except KeyboardInterrupt: server.shutdown() print('Server stopped') if __name__ == '__main__': run_server()
2. Flask框架实现(灵活易扩展)
如果需要后续添加权限验证、多文件处理等功能,Flask更适合。先安装依赖:pip install flask
from flask import Flask, request app = Flask(__name__) @app.route('/upload', methods=['POST']) def handle_upload(): # 支持两种上传格式 if 'file' in request.files: # 处理multipart/form-data格式(带文件名) uploaded_file = request.files['file'] if uploaded_file.filename: uploaded_file.save(f'./{uploaded_file.filename}') return 'File uploaded', 200 else: # 处理原始二进制格式 raw_data = request.get_data() with open('./received_file', 'wb') as f: f.write(raw_data) return 'File saved', 200 if __name__ == '__main__': # 允许外部设备访问,设置host为0.0.0.0 app.run(host='0.0.0.0', port=8000)
客户端curl命令
根据服务器实现选择对应命令:
- 上传原始二进制文件(适配两种服务器):
curl -X POST --data-binary @/本地文件路径 http://服务器IP:8000
- 以表单格式上传(适配Flask的
/upload接口):
curl -X POST -F "file=@/本地文件路径" http://服务器IP:8000/upload
关键注意点
- 确保服务器防火墙开放目标端口(如8000),两台设备处于同一网络或服务器有公网IP
- 大文件传输建议分块读取(原生server可修改
rfile.read为循环分块读取),避免内存溢出
内容的提问来源于stack exchange,提问作者user18422940
相关产品推荐
相关产品推荐

