当前位置: 首页 > 知识库问答 >
问题:

烧瓶/烧瓶Rest:强制/更正/覆盖POST请求的不正确内容类型标头

栾英资
2023-03-14

我遇到了一个封闭源代码应用程序的问题,该应用程序在标题中发送了不正确的内容类型。

我收到的数据为“内容类型:应用程序/x-www-form-urlencoded”

我应该将其作为“内容类型:application/json”接收

下面是烧瓶服务器代码,使用烧瓶和烧瓶Rest

from flask import Flask
from flask_restful import reqparse, abort, Api, Resource, request

TEST_PROXY = "0.0.0.0"
TEST_PROXY_PORT = 1885
DEBUG = True

app = Flask(__name__)
api = Api(app)

class TEST(Resource):

    def get(self, queue, subqueue):
        parser = reqparse.RequestParser()
        parser.add_argument('m', type=str, help='A message')
        args = parser.parse_args()

        TEST_queue = f'/{queue}/{subqueue}'
        message = args.get('m')

        return {'type': 'GET',
            'message': args.get('m'),
            'queue': TEST_queue}

    def post(self, queue, subqueue):
        TEST_queue = f'/{queue}/{subqueue}'

        # here is the problem
        # because of the incorrect header
        # the returned data is empty.

        message = request.data


        return {'type': 'POST',
           'message-length': len(message),
            'queue': TEST_queue}

api.add_resource(TEST, '/TEST/<string:queue>/<string:subqueue>')


if __name__ == '__main__':
    app.run(debug=DEBUG, host=TEST_PROXY, port=TEST_PROXY_PORT)

发送中

POST http://localhost:1885/TEST/sub/sub2
Content-Type: application/json

{"status": {"current_time": "now"}}

作品要求数据由内容填充

POST http://localhost:1885/TEST/sub/sub2
Content-Type: application/x-www-form-urlencoded

{"status": {"current_time": "now"}}

工作,但请求。数据现在是空的,取而代之的是,数据已被解析,不再以不变的形式提供。

由于发送者是闭源的,所以在短时间内不可能修复这方面的问题。

是否有方法覆盖POST请求/此请求的不正确内容类型,以便我可以访问原始发布数据?

共有1个答案

楚建柏
2023-03-14

您可以使用请求。获取数据()而不是请求。数据

来自文档:

数据以字符串形式包含传入请求数据,以防它与mimetype Werkzeug一起提供而无法处理。

get_data(缓存=True,as_text=False,parse_form_data=False)这将从客户端读取缓冲的传入数据到一个字节串中。默认情况下,这是缓存的,但是可以通过将缓存设置为False来更改该行为。

通常情况下,在不先检查内容长度的情况下调用此方法是一个坏主意,因为客户端可能会发送数十兆字节或更多的内容来导致服务器上的内存问题。

但最好检查请求中的值。内容\键入并从请求中获取数据。json请求。表单

 类似资料:
  • 我已经用flask在python上制作了一个restapi(端口:5000),我正在从一个网站(端口:80)发出get和post请求。我收到了cors错误,所以我尝试在RESTAPI中为站点创建一个响应头。但是我得到了导入错误: 我已经下载了烧瓶cors模块并升级它,并确保它是在正确的路径,但它仍然不工作。 API代码:

  • 我正在使用Flask,并从get请求返回一个XML文件。如何将内容类型设置为xml? 例如。

  • 我正在使用flask-RESTful开发API,并且对Flask的jsonify函数有问题。我正在使用flask-marshmlet进行JSON序列化。下面是一个非常简化的代码片段: 在本地,endpoint将返回具有键“data”和“error”的json;但是,当在Linux服务器上运行时,它会返回一个包含列表和在没有“data”和“error”键的情况下返回的结果。 我已经确定这种不一致是由

  • 我尝试使用axios对烧瓶服务器进行POST: 现在是烧瓶的部分 但是,我最终会出现以下错误: 无法加载XMLHttpRequesthttp://127.0.0.1:5000/test.对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access control Allow Origin”标头。起源'http://localhost:3000因此不允许访问。 为什么?我将按照建议设置标题

  • 我发现很难找到有关这方面的资料。会是什么?我如何解决这个问题?有哪些可能的修复方法? UWSGI日志文件 时钟来源:unix检测到CPU核数:4当前工作目录:/home/pi检测到二进制路径:/usr/local/bin/uwsgi!!!没有内部路由支持,重建与pcre支持!!!*警告:您在没有主进程管理器的情况下运行uWSGI进程数限制为7336内存页大小为4096字节检测到最大文件描述符号:6