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

Azure HTTP函数保存API JSON响应至Blob存储时挂起问题排查

代码问题分析及修正

核心问题点

  • 语法错误:占位符未替换
    os.getenv([Azure Blob Storage Connection String])、container_name=[container name]、blob_name=[name of json file]中的方括号是占位符标记,实际代码需要替换为字符串格式的真实值,比如os.getenv("AZURE_STORAGE_CONNECTION_STRING")、container_name="my-target-container",保留方括号会直接触发语法错误,导致函数无法正常执行。

  • BlobClient方法调用错误
    BlobClient没有set方法,上传字符串内容需使用upload_blob方法,若需要覆盖已存在的同名Blob,可添加overwrite=True参数。

  • 变量名冲突
    用request作为API响应的变量名,和函数参数req: func.HttpRequest重名,易引发逻辑混淆,建议改为api_response这类清晰名称。

  • 未处理API请求异常
    requests.get未做状态码校验和异常捕获,若第三方API超时、返回错误状态码,会导致函数挂起或静默失败,需添加api_response.raise_for_status()触发HTTP错误异常,并捕获网络请求相关异常。

修正后的代码

import os
import logging
import requests
import azure.functions as func
from azure.storage.blob import BlobClient

def main(req: func.HttpRequest) -> func.HttpResponse:
    # 读取存储账户连接字符串(需在Function应用设置中配置)
    connection_string = os.getenv("AZURE_STORAGE_CONNECTION_STRING")
    # 替换为实际的容器名和Blob文件名
    container_name = "your-container-name"
    blob_name = "SurveySchema.json"

    try:
        # 初始化Blob客户端
        blob_client = BlobClient.from_connection_string(
            conn_str=connection_string,
            container_name=container_name,
            blob_name=blob_name
        )
        # 调用第三方API,避免变量名冲突
        api_response = requests.get("https://your-third-party-api-endpoint.com")
        # 校验API响应状态,非200则抛出异常
        api_response.raise_for_status()
        
        # 上传JSON内容到Blob,允许覆盖已有文件
        blob_client.upload_blob(data=api_response.text, overwrite=True)
        logging.info("JSON内容已成功保存到Blob存储")
        
    except requests.exceptions.RequestException as req_err:
        logging.error(f"第三方API调用失败: {str(req_err)}")
        return func.HttpResponse("API请求失败", status_code=500)
    except Exception as err:
        logging.error(f"Blob存储操作失败: {str(err)}")
        return func.HttpResponse("存储操作失败", status_code=500)

    return func.HttpResponse('请求处理成功', status_code=200)

额外注意事项

  • 确保Azure Function的应用设置中已正确配置AZURE_STORAGE_CONNECTION_STRING,且对应的存储账户拥有目标容器的写入权限。
  • 若第三方API响应内容较大,建议使用流式上传(api_response.raw)减少内存占用。
  • 高并发场景下,同步IO操作(如requests.get)可能影响性能,可改用异步aiohttp库配合异步Function。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:15:35