Flask: 两个服务器间传送文件导致接收服务器 `request.files` 为空
我正在尝试从一个Flask服务器(Server 1
)发送文件到另一个Flask服务器(Server 2
),然后再返回。但是,当文件到达Server 2
时,request.files
对象似乎是空的,这导致我在访问它时出现了KeyError错误。
这是我服务器的基本设置:
Server 1:
from flask import Flask, request
import requests
app = Flask(__name__)
@app.route('/test', methods=['POST'])
def test():
file = request.files['file'].read()
print(file)
response = requests.post(url="http://127.0.0.1:5002/test",
headers=request.headers,
files={'file': file}
)
return response.json(), response.status_code
if __name__ == "__main__":
app.run(port=5000)
Server 2:
from flask import Flask, request
app = Flask(__name__)
@app.route('/test', methods=["POST"])
def test():
file = request.files['file'] # <-- KeyError occurs here
print(file)
return 1, 200
if __name__ == "__main__":
app.run(port=5002, debug=True)
这是错误信息
127.0.0.1 - - [23/Mar/2024 10:09:02] "POST /test HTTP/1.1" 500 -
Traceback (most recent call last):
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 1488, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 1466, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 1463, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 872, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 870, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\flask\app.py", line 855, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
File "C:\Users\gratu\Projects\flasktest\app2.py", line 10, in test
file = request.files['file']
File "C:\Users\gratu\anaconda3\envs\ML\lib\site-packages\werkzeug\datastructures\structures.py", line 192, in __getitem__
raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'file'
当文件从Server 1
发送到Server 2
时,Server 2
上的request.files
对象似乎是空的,这导致了KeyError错误。我确认文件是从Server 1
正确发送的,因为我打印时可以看到request.files
字典里有我发送的文件。
我不明白为什么Server 2
上的request.files
对象是空的。我的设置或代码中是否有什么我遗漏的?如果有任何见解或建议来解决这个问题,我将非常感激。谢谢!
1 个回答
0
原来问题出在传递头部信息上。当我把头部信息去掉后,它就开始正常工作了。
from flask import Flask, request
import requests
app = Flask(__name__)
@app.route('/test', methods=['POST'])
def test():
file = request.files['file'].read()
print(file)
response = requests.post(url="http://127.0.0.1:5002/test",
files={'file': file}
)
return response.json(), response.status_code
if __name__ == "__main__":
app.run(port=5000)