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

如何使用uWebSockets(uWS)获取HTTP请求的发送端IP地址

uWebSockets C++ 从HTTP请求中获取客户端IP的方案

不需要将HTTP连接升级为WebSocket来获取IP,uWS原生提供了HTTP场景下的客户端IP获取能力,具体实现如下:


1. 直连场景(无反向代理,客户端直接访问uWS服务)

直接调用HTTP响应对象的getRemoteAddress()方法即可拿到客户端原始IP,修改你的示例代码如下:

#include <iostream>
#include "App.h"

int main() {
  /* 极简Hello World示例 */
  uWS::App().get("/*", [](auto *res, auto *req) {
    // 获取客户端IP地址
    std::string_view client_ip = res->getRemoteAddress();
    std::cout << "客户端IP:" << client_ip << std::endl;

    res->end("Hello world!");
  }).listen(3000, [](auto *listen_socket) {
    if (listen_socket) {
      std::cout << "Listening on port " << 3000 << std::endl;
    }
  }).run();

  std::cout << "Failed to listen on port 3000" << std::endl;
  return 0;
}

2. 反向代理场景(经过Nginx、CDN等中间层转发)

此时getRemoteAddress()获取到的是代理服务器的IP,需要从HTTP请求头中提取X-Forwarded-For或者X-Real-IP字段获取真实客户端IP,示例代码如下:

uWS::App().get("/*", [](auto *res, auto *req) {
    // 从请求头获取代理转发的真实IP
    std::string_view real_ip = req->getHeader("x-forwarded-for");
    // 如果代理配置的是X-Real-IP头就换成 req->getHeader("x-real-ip")
    std::cout << "真实客户端IP:" << real_ip << std::endl;

    res->end("Hello world!");
})

注意:getRemoteAddress()方法在uWS C++ v19及以上稳定版本均支持,低版本可升级到官方最新稳定版使用该能力。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:02