我有一个使用该requests包发布到服务器的应用程序。在我的测试环境中,我想建立一个简单的服务器,以便我可以验证客户端的请求。但是,当我打电话时requests.post,它就挂起了。服务器根本不会响应,直到客户端最终超时并且连接关闭。讽刺的是,服务器随后发送了 200 OK。
这是我的服务器 MRE:
import http.server
class TestHandler(http.server.BaseHTTPRequestHandler):
def do_POST(self):
print('Received:', self.rfile.read())
self.send_response(200)
self.end_headers()
if __name__ == '__main__':
http.server.HTTPServer(('127.0.0.1', 8080), TestHandler).serve_forever()
Run Code Online (Sandbox Code Playgroud)
这是我为客户提供的 MRE:
import requests
if __name__ == '__main__':
print(requests.post('http://127.0.0.1:8080/hello', data='Testing', timeout=5))
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用线程在后台运行 python http 服务器。我遇到了几个执行以下操作的参考文献:
import threading
import http.server
import socket
from http.server import HTTPServer, SimpleHTTPRequestHandler
debug = True
server = http.server.ThreadingHTTPServer((socket.gethostname(), 6666), SimpleHTTPRequestHandler)
if debug:
print("Starting Server in background")
thread = threading.Thread(target = server.serve_forever)
thread.daemon = True
thread.start()
else:
print("Starting Server")
print('Starting server at http://{}:{}'.format(socket.gethostname(), 6666))
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
当 thread.daemon 设置为True时,程序将完成而不启动服务器(端口 6666 上没有任何运行)。当我将 thread.daemon 设置为False时,它会在前台启动服务器并阻止终端,直到我手动终止它。
关于如何进行这项工作有什么想法吗?