You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:35:11