处理REST API中收到的URL

时间:2019-02-01 08:24:56

标签: python api flask

我在Flask中构建了一个API,该API可将HTML页面通过其URL转换为PDF。但是,只要URL中包含斜杠,脚本就会输出404。

这是代码-

def api(self):
    app = Flask(__name__)
    @app.route('/api/dodo/<filename>/<url>', methods=['GET', 'POST'])

    def convert(url, filename):
        content = request.json
        outfile = pdfkit.from_url(str(url), filename)
        return jsonify({"url":url, 'filename': filename})

    app.run(debug=True)

如果请求为localhost/api/dodo/filename/google.com 我确实得到了输出文件。但是如果我发送此请求

http://localhost/api/dodo/filename/https://dev.bizlem.io:8082/scorpio1/GALBRAITH'S_FUEL_27K-55K_ETA_CENTRAL_MED_LIST_-_14TH_JANUARY_2019_1.html

我得到404。

1 个答案:

答案 0 :(得分:1)

据我了解,之所以会这样,是因为后一种情况下的url实际上会映射到另一个端点。请注意,URL中添加的斜杠会更改含义。

一个更好的方法是对filenameurl参数进行编码,然后将它们作为GET参数传递(据我所知,/ api / dodo是您的REST API端点,而filename url是参数)。

代码应如下所示:

def api():
    app = Flask(__name__)

    @app.route('/api/dodo', methods=['GET'])
    def convert():
        url = request.args.get('url')
        filename = request.args.get('filename')
        outfile = pdfkit.from_url(url, filename)

        return jsonify({"url":url, 'filename': filename})

    app.run(debug=True)

然后,用于访问资源的网址为:

http://127.0.0.1:5000/api/dodo?url=https%3A%2F%2Fdev.bizlem.io%3A8082%2Fscorpio1%2FGALBRAITH%27S_FUEL_27K-55K_ETA_CENTRAL_MED_LIST_-_14TH_JANUARY_2019_1.html&filename=okay