调用Azure AutoML端点时触发403禁止错误(Flask应用场景)
解决Azure AutoML端点403禁止访问错误
我开发了一个基于Flask的应用,通过Azure AutoML模型根据用户输入做预测。完成代码和端点配置后,向AutoML端点发送POST请求时返回403禁止错误,用Postman测试该端点也得到相同结果。
所用代码
from flask import Flask, render_template, request, jsonify import requests import json app = Flask(__name__) # 首页路由 @app.route('/') def home(): return render_template('index.html') # 预测路由(POST方法) @app.route('/predict', methods=['POST']) def predict(): # 收集表单数据 data = { "age": int(request.form['age']), "job": request.form['job'], "marital": request.form['marital'], "education": request.form['education'], "default": request.form['default'], "housing": request.form['housing'], "loan": request.form['loan'], "contact": request.form['contact'], "month": request.form['month'], "day_of_week": request.form['day_of_week'], "duration": int(request.form['duration']), "campaign": int(request.form['campaign']), "pdays": int(request.form['pdays']), "previous": int(request.form['previous']), "poutcome": request.form['poutcome'], "emp.var.rate": float(request.form['emp_var_rate']), "cons.price.idx": float(request.form['cons_price_idx']), "cons.conf.idx": float(request.form['cons_conf_idx']), "euribor3m": float(request.form['euribor3m']), "nr.employed": float(request.form['nr_employed']) } # 格式化AutoML端点所需数据 input_data = { "input_data": { "columns": [ "age", "job", "marital", "education", "default", "housing", "loan", "contact", "month", "day_of_week", "duration", "campaign", "pdays", "previous", "poutcome", "emp.var.rate", "cons.price.idx", "cons.conf.idx", "euribor3m", "nr.employed" ], "index": [0], "data": [[ data['age'], data['job'], data['marital'], data['education'], data['default'], data['housing'], data['loan'], data['contact'], data['month'], data['day_of_week'], data['duration'], data['campaign'], data['pdays'], data['previous'], data['poutcome'], data['emp.var.rate'], data['cons.price.idx'], data['cons.conf.idx'], data['euribor3m'], data['nr.employed'] ]] } } # 向Azure AutoML端点发送请求,携带Authorization头 headers = { 'Content-Type': 'application/json', 'Authorization': ' xxxxxxxx' } automl_endpoint_url = 'https://bankmarketing-09241401697583.eastus.inference.ml.azure.com/score' response = requests.post(automl_endpoint_url, headers=headers, json=input_data) # 解析AutoML模型的响应 if response.status_code == 200: prediction = response.json() return jsonify(prediction) else: return jsonify({"error": "Error in prediction", "status_code": response.status_code}) if __name__ == '__main__': app.run(debug=True)
错误输出
{ "error": "Error in prediction", "status_code": 403 }
解决步骤
- 修正Authorization头格式:Azure AutoML端点要求Authorization头的值必须以
Bearer为前缀,且前缀与密钥之间无多余空格。修改代码中的headers部分:headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer xxxxxxxx' # 去掉前缀前的空格,添加Bearer } - 验证端点密钥正确性:确认使用的是Azure ML Studio中该端点的Primary或Secondary密钥,而非工作区密钥或其他无关密钥。
- 检查端点网络访问权限:如果端点配置为私有访问,需确保Flask应用所在环境(如本地服务器、云虚拟机)处于允许访问该端点的网络范围内(如VNet对等连接、添加允许的IP地址);若为公开端点,确认未设置IP限制。
- 确认端点运行状态:登录Azure ML Studio,检查该AutoML端点是否处于健康运行状态,未被禁用或暂停。
- 核对请求数据格式:虽然403属于权限错误,但可对比Azure提供的端点示例请求,确认
input_data的结构、字段名与模型要求完全一致。
内容的提问来源于stack exchange,提问作者Techzill
相关产品推荐
相关产品推荐

