В дополнение к тому, что сказал Рашман, вы также можете проверить, что URL начинается с «http:» или «https:» перед его обработкой.
Кроме того, вы НЕ должны убирать «www»."часть.Все, что находится между ": //" и следующим "/", является именем хоста.Решите это как есть, DNS справится с этим хорошо.На самом деле, если вы удалите его, вы можете получить разные результаты.Например, «yahoo.com» преобразуется в «98.139.180.149», а «www.yahoo.com» преобразуется в «72.30.2.43».Браузер не собирается убирать "www.", Так что вам тоже не следует.
Попробуйте это:
BSTR bstr;
pBrowser->get_LocationURL(&bstr);
std::wstring wsURL(bstr, SysStringLen(bstr));
SysFreeString(bstr);
std::wstring wsHost;
size_t DSlashLoc = wsURL.find(L"://");
if (DSlashLoc != std::wstring::npos)
{
DSlashLoc += 3;
size_t DSlashLoc2 = wsURL.find(L"/", DSlashLoc);
if (DSlashLoc2 != std::wstring::npos)
wsHost = wsURL.substr(DSlashLoc, DSlashLoc2 - DSlashLoc);
else
wsHost = wsURL.substr(DSlashLoc);
}
if (wsHost.empty())
{
printf("\n Unknown Website Host");
}
else
{
wprintf(L"\n Website Host: %s", wsHost.c_str());
std::string sHost;
int Newlength = WideCharToMultiByte (CP_ACP, WC_COMPOSITECHECK, wsHost.c_str(), wsHost.length(), NULL, 0, NULL, NULL);
if (Newlength > 0)
{
sHost.resize(Newlength);
WideCharToMultiByte (CP_ACP, WC_COMPOSITECHECK, wsHost.c_str(), wsHost.length(), &sHost[0], Newlength, NULL, NULL);
}
HOSTENT *pHostEnt2 = gethostbyname(sHost.c_str());
if (!pHostEnt2)
{
printf("\n Unknown Website IP");
}
else if (pHostEnt2->h_addrtype != AF_INET)
{
printf("\n Website does not use IPv4 addresses");
}
else
{
for (char **addr = pHostEnt2->h_addr_list; *addr != NULL; ++addr)
{
printf("\n Website IP: %s", inet_ntoa(* (struct in_addr *) *addr));
}
}
}