python - 尝试将带有文件的数据表单转发到另一个网络服务

标签 python flask python-requests forwarding

我正在尝试将数据表单请求转发到另一个 Web 服务,但是当我在另一个 Web 服务中收到新请求时,它包含表单数据,但不包含文件数据:

[+] Forward 1: ImmutableMultiDict([('content', <FileStorage: '0,1.txt' ('text/plain')>)])
[+] Forward 2: ImmutableMultiDict([('content', <FileStorage: 'content' (None)>)])

在代码中,您可以看到索引呈现了表单。您选择一个文件,它会将其发送到第一个 Web 服务 (forward1)。在此 Web 服务中,它尝试将 request.form 和 request.files 发送到第二个 Web 服务 (forward2)。但并非所有信息都能正确到达。

可能会发生什么?

我已经尝试过这个,但这个解决方案对我不起作用。 Forwarding multipart/form-data to different service (python, bottle, requests)

import requests
from flask import Flask, request, url_for
from werkzeug.datastructures import FileStorage


app = Flask(__name__)

@app.route('/')
def index(methods=['GET', 'POST']):
    return """<html>
                <form method="post" action="{}" enctype="multipart/form-data">
                <input name="content" type="file" />
                <input type="submit">
                </form>
            </html>""".format(url_for('forward1'))

@app.route('/fw1', methods=['GET', 'POST'])
def forward1():
    if request.method == "POST":

        payload = request.form
        files = request.files

        print("[+] Forward 1:", request.files)

        response = requests.request(
            "POST", 
            "http://XXX.XXX.XXX.XXX:5000/fw2", 
            data=payload, 
            files=files
        )

        return ""

@app.route('/fw2', methods=['GET', 'POST'])
def forward2():
    if request.method == "POST":
        print("[+] Forward 2:", request.files)
        return ""

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug = True)

最佳答案

您可以像下面的代码一样进行

response = requests.request(
        "POST", 
        "http://XXX.XXX.XXX.XXX:5000/fw2", 
        data=payload, 
        files={k: (f.filename, f.stream, f.content_type, f.headers) for k, v in files.items()}
    )

关于python - 尝试将带有文件的数据表单转发到另一个网络服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58377602/

相关文章:

python - np.load() 对于较大的文件异常缓慢

python -/socket.io/* 404 未找到 flask

python - Pandas 数据框中的过滤

flask - 如何将 Vue.js 指令插入到 WTForms flask 表单中?

python - redhat openshift cloud 中的 flask 静态文件

python - 将 for 循环与 firestore 数据迭代 API 请求结合使用时出现 JSONDecodeError

python-3.x - 无法刮掉 Myntra

python - 如何通过 TOR 和 Privoxy 使用 Python 请求获取 HTTPS 内容

python - numpy 中的精度 : issues while comparing numbers

Python:BeautifulSoup 从 div 类中提取所有 h1 文本