[英]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中添加的斜杠會更改含義。
更好的方法是對filename
和url
參數進行urlencode,並將它們作為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)
然后,用於訪問資源的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.