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

如何在Ballerina中从HTTP请求获取远程客户端IP地址

在Ballerina 0.97.1中获取HTTP请求的客户端远程IP

在Ballerina 0.97.1版本里,完全可以获取到客户端的远程IP地址,这里有两种实用的方式:

  • 直接通过请求对象的内置方法获取
    这个版本的http:Request对象提供了getRemoteAddress()方法,调用它就能拿到包含IP和端口的客户端地址字符串。举个简单的示例:

    import ballerina/http;
    
    service<http> helloWorld {
        resource function get greeting(http:Request req) {
            // 获取包含IP和端口的远程地址
            string remoteAddr = req.getRemoteAddress();
            // 如果只需要IP部分,可以拆分字符串
            string[] addrParts = remoteAddr.split(":");
            string clientIp = addrParts[0];
            
            return { payload: "你的客户端IP是: " + clientIp };
        }
    }
    
  • 处理反向代理场景下的真实IP
    如果你的服务部署在反向代理(比如Nginx)后面,直接用上面的方法拿到的会是代理服务器的IP。这时候需要检查请求头里的X-Forwarded-For,这个头通常会记录原始客户端的IP地址(可能包含多个IP,第一个就是原始客户端的):

    import ballerina/http;
    
    service<http> helloWorld {
        resource function get greeting(http:Request req) {
            string? forwardedFor = req.getHeader("X-Forwarded-For");
            string clientIp = "未知";
            if (forwardedFor is string) {
                // 拆分并取第一个IP,去除可能的空格
                string[] ips = forwardedFor.split(",");
                clientIp = ips[0].trim();
            } else {
                // 如果没有这个头, fallback 到直接获取的地址
                string remoteAddr = req.getRemoteAddress();
                string[] addrParts = remoteAddr.split(":");
                clientIp = addrParts[0];
            }
            
            return { payload: "你的真实客户端IP是: " + clientIp };
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:18:20