libevent http服务获取阿里云https转发后的真实ip
1、一开始c++服务端使用http 作为接口没啥问题,后面渠道方强制只支持https接口解决办法:
1、使用阿里云的https转发代理服务,价钱不贵,自己搭nginx比较麻烦
2、可以https访问接口后,发现获取的客户端ip每次都是变动的代理ip
3、服务端是libevent写的一个简易http内嵌服务。需要获取真实ip头。直接上代码:
std::vector<std::string> vStringSplit(const std::string& s, const std::string& delim = ","){
std::vector<std::string> elems;
size_t pos = 0;
size_t len = s.length();
size_t delim_len = delim.length();
if (delim_len == 0) return elems;
while (pos < len)
{
int find_pos = s.find(delim, pos);
if (find_pos < 0)
{
elems.push_back(s.substr(pos, len - pos));
break;
}
elems.push_back(s.substr(pos, find_pos - pos));
pos = find_pos + delim_len;
}
return elems;
}
std::string szRemoteAddr = req->remote_host;
const char * szHeaderTmp = evhttp_find_header(req->input_headers, "X-Forwarded-For");
if (szHeaderTmp){
std::string strHeaderTmp = szHeaderTmp;
auto headers = vStringSplit(strHeaderTmp);
if (headers.size() > 0)szRemoteAddr = headers;
}
evhttp_add_header(req->output_headers, "RemoteHost", szRemoteAddr.c_str());
页:
[1]