簡體   English   中英

處理REST API中收到的URL

[英]Processing a URL recieved in REST API

我在Flask中構建了一個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。

據我了解,之所以會這樣,是因為后一種情況下的url實際上映射到了另一個端點。 請注意,URL中添加的斜杠會更改含義。

更好的方法是對filenameurl參數進行urlencode,並將它們作為GET參數傳遞(從我看來,/ api / dodo是您的REST API端點, filenameurl是參數)。

該代碼應如下所示:

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)

然后,用於訪問資源的url將是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM