如何在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
相关产品推荐
相关产品推荐

