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

Python版Azure Functions部署报错:‘Duplex option is required’

修复Azure Functions Python版“发送请求体时需指定duplex选项”错误

错误原因

这个错误源于Python HTTP请求客户端在异步运行环境(Azure Functions Python运行时默认基于异步框架)中发送带请求体的请求时,缺少duplex参数配置。更新凭证后,请求的认证逻辑或请求结构变化,触发了这个配置缺失的问题。

具体修复方案

1. 同步请求(requests库)直接添加duplex参数

如果代码使用requests库发送POST/PUT等带请求体的请求,只需在请求调用中添加duplex=True参数:

原代码示例:

import requests

def main(req: func.HttpRequest) -> func.HttpResponse:
    url = "https://your-api-endpoint"
    headers = {"Authorization": "Bearer YOUR_TOKEN"}
    data = {"key": "value"}
    response = requests.post(url, json=data, headers=headers)
    return func.HttpResponse(response.text, status_code=response.status_code)

修改后代码:

import requests

def main(req: func.HttpRequest) -> func.HttpResponse:
    url = "https://your-api-endpoint"
    headers = {"Authorization": "Bearer YOUR_TOKEN"}
    data = {"key": "value"}
    # 添加duplex=True参数
    response = requests.post(url, json=data, headers=headers, duplex=True)
    return func.HttpResponse(response.text, status_code=response.status_code)

2. Azure SDK客户端配置传输层

如果使用Azure官方SDK(如azure-storage-blob、azure-keyvault-secrets等),需要在创建客户端时配置包含duplex参数的传输层:

from azure.storage.blob import BlobServiceClient
from azure.core.pipeline.transport import RequestsTransport
from azure.identity import DefaultAzureCredential

def main(req: func.HttpRequest) -> func.HttpResponse:
    account_url = "https://yourstorageaccount.blob.core.windows.net"
    # 配置传输层,添加duplex参数
    transport = RequestsTransport(kwargs={"duplex": True})
    # 传入更新后的凭证和配置好的传输层
    blob_service_client = BlobServiceClient(
        account_url=account_url,
        credential=DefaultAzureCredential(),
        transport=transport
    )
    # 后续业务逻辑
    return func.HttpResponse("Success", status_code=200)

3. 异步函数适配异步HTTP客户端

如果你的Azure Function是异步类型(用async def定义),建议使用异步HTTP客户端(如aiohttp)替代同步的requests,从根源避免此类环境兼容问题:

import aiohttp
import azure.functions as func

async def main(req: func.HttpRequest) -> func.HttpResponse:
    url = "https://your-api-endpoint"
    headers = {"Authorization": "Bearer YOUR_TOKEN"}
    data = {"key": "value"}
    
    async with aiohttp.ClientSession() as session:
        async with session.post(url, json=data, headers=headers) as response:
            result = await response.text()
            return func.HttpResponse(result, status_code=response.status)

额外检查项

  • 确认更新后的凭证(如服务主体密钥、Managed Identity权限)在Azure环境中配置正确,避免因凭证验证失败间接触发请求异常。
  • 若使用环境变量存储凭证,检查Azure Functions应用设置中是否已更新对应变量值。

内容的提问来源于stack exchange,提问作者SchmitzIT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:53:25