我在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。
答案 0 :(得分:1)
据我了解,之所以会这样,是因为后一种情况下的url实际上会映射到另一个端点。请注意,URL中添加的斜杠会更改含义。
一个更好的方法是对filename
和url
参数进行编码,然后将它们作为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