说明:
初步请求一个url。Crack Url后的host有多个ip。(服务器端可能集群,有多个ip)
获取真实处理该请求的的ip。
WINHTTP_CONNECTION_INFO ConnInfo;
DWORD dwConnInfoSize = sizeof(WINHTTP_CONNECTION_INFO);
result = WinHttpQueryOption( hRequest_,
WINHTTP_OPTION_CONNECTION_INFO,
&ConnInfo,
&dwConnInfoSize);
if ( result != TRUE)
return ::GetLastError();
SOCKADDR_STORAGE remote_address = ConnInfo.RemoteAddress;
sockaddr_in* pSin = (sockaddr_in*)((sockaddr*)&remote_address);
if (code_ == 301 || code_ == 302)
{
url_commpent_.re_remote_ip=inet_ntoa(pSin->sin_addr);
std::stringstream port_to;
port_to<<pSin->sin_port;
url_commpent_.re_remote_port=port_to.str();
}
else
{
url_commpent_.remote_ip=inet_ntoa(pSin->sin_addr);
std::stringstream port_to;
port_to<<pSin->sin_port;
url_commpent_.remote_port=port_to.str();
}
解释:
用在WinHttpReceiveResponse之后。
返回结果在WINHTTP_CONNECTION_INFO结构体。需先将SOCKADDR_STORAGE转sockaddr,后转sockaddr_in。取出之后inet_ntoa得到点分十进制ip地址。同时可获取服务器端口。