函数cgi.FieldStorage冻结Python HTTPS服务器
Function cgi.FieldStorage freezes Python HTTPS server
我正在编写一个Python HTTPS服务器,客户端可以在其中上传文件(1到10MB之间的二进制文件)。我使用带有自定义BaseHTTPRequestHandler的HTTPServer。请求由以下代码处理:
ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
if ctype == "multipart/form-data":
fs = cgi.FieldStorage(fp = self.rfile,
headers = self.headers,
environ = {'REQUEST_METHOD':'POST'})
客户端是用C++编写的,带有libcurl。请求通过以下代码发送:
std::string url = getURLServer("senddata");
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
std::string szPostFields = "id=" + std::to_string(ID);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szPostFields.c_str());
struct curl_httppost *post = NULL;
struct curl_httppost *last = NULL;
curl_formadd(&post, &last,
CURLFORM_COPYNAME, "logfile",
CURLFORM_FILECONTENT, ".\log.bin",
CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
res = curl_easy_perform(curl);
问题是服务器在cgi.FieldStorage(...)
处冻结。如果我不上传文件,它不会冻结。
我的错误!我首先阅读了这个代码的输入,以便获得参数:
length = int(self.headers.getheader('content-length'))
field_data = self.rfile.read(length)
fields = urlparse.parse_qs(field_data)
然后进行cgi.FieldStorage
,得到实际上传的文件。实际上,我假设初始读取消耗了套接字输入,而我冻结的只是我的服务器在等待新数据。
最后,我只删除了这3行,并单独使用cgi.FieldStorage
处理所有数据。
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 从服务器传输到客户端的消息不会出现
- 在我的HTTPS服务器中禁用DES
- Windows HTTP服务器API HTTPS服务器
- 使用 boost::asio 连接到 HTTPS 服务器
- 具有cpp-netlib的Https服务器
- 使用poco库构建HTTPS服务器时出错
- QSslSocket代理服务器(https)和证书.握手错误
- 函数cgi.FieldStorage冻结Python HTTPS服务器
- c++轻量级https服务器嵌入到应用程序中
- 使用libCurl和JsonCpp从https web服务器解析
- 用于c++的HTTP和HTTPS服务器库
- 简单的HTTPS服务器和保持连接
- POCO HTTPS请求验证服务器证书
- 如何用c++实现一个支持HTTPS的RESTful Web服务器
- HTTPS 客户端和服务器一起使用C++和 POCO 库(SSL 上下文问题)
- web服务- json-rpc服务器通过HTTPS使用c++