Python mod wsgi在使用https和大型数据包发布期间挂起
我用Python mod wsgi在使用https和大型数据包发布期间挂起,python,apache,flask,https,mod-wsgi,Python,Apache,Flask,Https,Mod Wsgi,我用apache24+openssl(1.1.1)+mod wsgi(4.5.24+ap24vc14)在win10中创建了一个https环境 它对http发布很有效(无论发布数据包有多大),但我遇到了https发布的问题 对于https发布: 当客户机和服务器是同一台本地计算机时,无论发布数据包有多大,都可以正常工作 当客户端是同一域中的另一台机器时,它也适用于中小型发布数据包,可能小于3M,没有精确的数字 当客户端是同一域中的另一台机器,并且发布了相对较大的数据包(大约5M或6M),在最初几次
apache24
+openssl(1.1.1)
+mod wsgi(4.5.24+ap24vc14)
在win10中创建了一个https环境
它对http发布很有效(无论发布数据包有多大),但我遇到了https发布的问题
对于https发布:
body=environ['wsgi.input'].read(length)
,没有响应,也没有错误(很少会在长时间后成功通过,但大多数情况下会一直挂起,直到连接超时)length
的运行时值既正确又相同body=environ['wsgi.input'].read(length)
来自sys.stdin.buffer.read(length)
,但我仍然找不到根本原因和解决方案import json
import requests
import base64
import requests.packages.urllib3.util.ssl_
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'ALL'
url="https://192.168.0.86"
# url="http://192.168.0.86"
f_img=open("./PICs/20191024142412.jpg",'rb')
# f_img=open("./PICs/20191023092645.jpg",'rb')
json_data={'type':'idpic','image':str(base64.b64encode(f_img.read()),'utf-8')}
result = requests.post(url,json=json_data,verify=False)
result_data=json.loads(result.content)
print(result_data)
部分服务器代码:
class WSGICopyBody(object):
def __init__(self, application):
self.application = application
def __call__(self, environ, start_response):
from io import StringIO, BytesIO
length = environ.get('CONTENT_LENGTH', '0')
length = 0 if length == '' else int(length)
body = environ['wsgi.input'].read(length)
environ['body_copy'] = body
environ['wsgi.input'] = BytesIO(body)
app_iter = self.application(environ,self._sr_callback(start_response))
return app_iter
def _sr_callback(self, start_response):
def callback(status, headers, exc_info=None):
start_response(status, headers, exc_info)
return callback
app = Flask(__name__)
app.wsgi_app = WSGICopyBody(app.wsgi_app)
@app.route('/',methods=['POST'])
@app.route('/picserver',methods=['POST'])
def picserver():
print("before request.get_data")
request_json_data = request.environ['body_copy']