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

如何获取Azure Functions的IP地址?请求触发返回IP的代码无响应问题

解决Azure Functions返回IP地址时执行停滞的问题

你的代码陷入停滞的核心原因是没有调用context.done()——在基于@azure/functions的传统Node.js函数模型中,必须显式调用这个方法通知运行时函数执行完成,否则函数会一直挂起直到超时终止。

同时,x-forwarded-for头可能包含多个用逗号分隔的IP地址,需要做简单处理;另外本地测试或无代理场景下,还需要添加IP获取的 fallback 逻辑。

修正后的完整代码

import { AzureFunction, Context, HttpRequest } from "@azure/functions";

const httpTrigger: AzureFunction = function (context: Context, req: HttpRequest): void {
    console.log("HTTP trigger function processed a request.");

    let ip: string | undefined;
    // 处理x-forwarded-for头,取第一个IP
    const xForwardedFor = req.headers["x-forwarded-for"] as string;
    if (xForwardedFor) {
        ip = xForwardedFor.split(",")[0].trim();
    } 
    // 本地测试或无代理时的fallback
    else if (req.connection?.remoteAddress) {
        ip = req.connection.remoteAddress;
    }
    else if (req.socket?.remoteAddress) {
        ip = req.socket.remoteAddress;
    }

    context.res = {
        body: { ip: ip || "无法获取IP地址" },
        status: 200
    };

    // 关键:调用此方法结束函数执行
    context.done();
};

export default httpTrigger;

关键修改说明

  • 添加context.done():这是触发函数返回响应、结束执行的必要步骤,缺失会导致函数一直处于运行状态。
  • 优化IP提取逻辑:拆分x-forwarded-for的多IP值,同时增加本地测试场景下的IP获取方式,避免返回空值。

如果你使用Node.js v4+函数模型(推荐)

如果你的Azure Functions使用的是v4版本的@azure/functions,可以用async/await语法,无需调用context.done(),代码更简洁:

import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";

export async function httpTrigger(req: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log("HTTP trigger function processed a request.");

    let ip: string | undefined;
    const xForwardedFor = req.headers.get("x-forwarded-for");
    if (xForwardedFor) {
        ip = xForwardedFor.split(",")[0].trim();
    } else if (req.socket?.remoteAddress) {
        ip = req.socket.remoteAddress;
    }

    return {
        jsonBody: { ip: ip || "无法获取IP地址" },
        status: 200
    };
}

app.http('httpTrigger', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    handler: httpTrigger
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:35:13