请求模块在上载文件时仅在virtualenv中显示错误

2024-10-06 12:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常简单的python脚本test.py

import requests
f = open('test.txt', 'rb')
r = requests.post('http://localhost:5000/uploadFile', files={'file': f})
print(r.text)

它应该将文件“test.txt”发送到localhost,我在那里运行flask应用程序。这是flaskapp.py的代码

app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 3 * 1024 * 1024 * 1024

@app.route("/uploadFile", methods=['POST'])
def uploadFile():
    return "ok"

if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app.run(host='0.0.0.0', port=port, threaded=True)

它实际上只是返回“ok”

当我正常运行test.py时,它会按预期打印“ok”。但是,当我激活virtualenv并运行相同的代码时,会显示此错误消息

Traceback (most recent call last):
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\urllib3\response.py", line 437, in _error_catcher
    yield
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\urllib3\response.py", line 519, in read
    data = self._fp.read(amt) if not fp_closed else b""
  File "c:\users\fsvic\appdata\local\programs\python\python37\Lib\http\client.py", line 457, in read
    n = self.readinto(b)
  File "c:\users\fsvic\appdata\local\programs\python\python37\Lib\http\client.py", line 501, in readinto
    n = self.fp.readinto(b)
  File "c:\users\fsvic\appdata\local\programs\python\python37\Lib\socket.py", line 589, in readinto
    return self._sock.recv_into(b)
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\requests\models.py", line 751, in generate
    for chunk in self.raw.stream(chunk_size, decode_content=True):
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\urllib3\response.py", line 576, in stream
    data = self.read(amt=amt, decode_content=decode_content)
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\urllib3\response.py", line 541, in read
    raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
  File "c:\users\fsvic\appdata\local\programs\python\python37\Lib\contextlib.py", line 130, in __exit__
    self.gen.throw(type, value, traceback)
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\urllib3\response.py", line 455, in _error_catcher
    raise ProtocolError("Connection broken: %r" % e, e)
urllib3.exceptions.ProtocolError: ("Connection broken: ConnectionAbortedError(10053, 'An established connection was aborted by the software in your host machine', None, 10053, None)", ConnectionAbortedError(10053, 'An established connection was aborted by the software in your host machine', None, 10053, None))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "teste.py", line 13, in <module>
    r = requests.post('http://localhost:5000/uploadFile', files={'file': f})
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\requests\api.py", line 119, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\requests\sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\requests\sessions.py", line 683, in send
    r.content
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\requests\models.py", line 829, in content
    self._content = b''.join(self.iter_content(CONTENT_CHUNK_SIZE)) or b''
  File "G:\Felipe\Projetos\host-python\venv-teste\lib\site-packages\requests\models.py", line 754, in generate
    raise ChunkedEncodingError(e)
requests.exceptions.ChunkedEncodingError: ("Connection broken: ConnectionAbortedError(10053, 'An established connection was aborted by the software in your host machine', None, 10053, None)", ConnectionAbortedError(10053, 'An established connection was aborted by the software in your host machine', None, 10053, None))

在virtualenv中执行pip list将检索以下模块

Package    Version
---------- ----------
certifi    2020.4.5.1
chardet    3.0.4
idna       2.9
pip        20.1.1
requests   2.23.0
setuptools 47.1.1
urllib3    1.25.9
wheel      0.34.2

出于某种原因,如果test.txt小于750kb,virtualenv就可以正常工作

为什么会这样


Tags: inpyselfnonehostvenvlibpackages