Он должен быть добавлен в проект, проверяя правильность прокси-серверов. Алгоритм работает прост: 1. Я пытаюсь подключиться к определенному серверу через прокси. 2. Я получаю содержимое страницы (адрес). 3. Подключение к одному и тому же серверу напрямую. 4. Сравните их адреса, если они соответствуют прокси, не является анонимным.CinternetSession: странное поведение при подключении
Но по какой-то причине после того, как программа сначала подключилась к прокси-серверу, тогда попытка получить соединение через другой прокси-сервер или напрямую не удалась. Когда я читаю адрес, вы всегда получаете адрес первого прокси. По прошествии некоторого времени, пытаясь запустить тест, проверка всех начинает работать правильно. Но достаточно, чтобы перезагрузить Windows и начать все заново.
Что я делаю неправильно? Проект http://dl.dropbox.com/u/10669949/work/internet_site.zip
CString CDataSender::GetNotDirect(CString proxy)
{
try
{
auto_ptr<CString> proxyip(new CString);
CString page ="/ip.php";
CString host="176.65.165.57";
if (proxy.IsEmpty()) return "";
auto_ptr<CInternetSession> iProxy (new CInternetSession("Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.11",1,INTERNET_OPEN_TYPE_PROXY,proxy));
auto_ptr<CHttpConnection> pH(iProxy->GetHttpConnection(host,INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_PRAGMA_NOCACHE,80));
auto_ptr<CHttpFile> pF(pH->OpenRequest("GET",page));
pF->SendRequest();
pF->ReadString(*proxyip);
iProxy->Close();
pH->Close();
pF->Close();
return *proxyip;
}
catch(CInternetException *pEx)
{
cout<<pEx->m_dwError<<endl;
return "";
}
}
CString CDataSender::GetDirect()
{
try
{
auto_ptr<CString> directip(new CString);
int nCount=0;
CString page ="/ip.php";
CString host="176.65.165.57";
auto_ptr<CInternetSession> iDirect(new CInternetSession (/*"Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.11"*/"",1,INTERNET_OPEN_TYPE_DIRECT));
auto_ptr<CHttpConnection> pH(iDirect->GetHttpConnection(host,INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_PRAGMA_NOCACHE,80));
auto_ptr<CHttpFile> pF(pH->OpenRequest("GET",page));
pF->SendRequest();
pF->ReadString(*directip);
iDirect->Close();
//////////////////////////////////////////////////////////////////////////
pH->Close();
pF->Close();
return *directip;
}
catch(CInternetException *pEx)
{
cout<<pEx->m_dwError<<endl;
return "";
}
}
int CDataSender::CheckProxy(CString proxy)
{
CString directip="",proxyip="";
proxyip.Empty();directip.Empty();
proxyip=GetNotDirect(proxy);
if(proxyip!="")
directip=GetDirect();
else
return -1;
cout<<"Direct: "<<directip<<endl;
cout<<"Proxy: "<<proxyip<<endl;
if ((proxyip!="")&&(directip!="")&&(proxyip.Find("html")==-1)&&/*(proxyip.GetLength()<16) &&*/(proxyip.Find(directip)==-1) /*|| proxyip=="1.1.1.1"*/)
{
return 1;
}
return -1;
}