2012-05-23 3 views
0

Он должен быть добавлен в проект, проверяя правильность прокси-серверов. Алгоритм работает прост: 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; 
} 

ответ

0

решаемая проблема. Добавлены соответствующие флаги.

auto_ptr<CHttpConnection> pH(iDirect->GetHttpConnection(host,INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE|INTERNET_IDENTITY_FLAG_CLEAR_CONTENT|INTERNET_IDENTITY_FLAG_CLEAR_DATA|INTERNET_IDENTITY_FLAG_CLEAR_COOKIES,80)); 
    auto_ptr<CHttpFile> pF(pH->OpenRequest("GET",page,NULL,1,NULL,NULL,INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE|INTERNET_IDENTITY_FLAG_CLEAR_CONTENT|INTERNET_IDENTITY_FLAG_CLEAR_DATA|INTERNET_IDENTITY_FLAG_CLEAR_COOKIES)); 

Аналогичным образом, для другой функции.

0

Попробуйте сделать это с гнездами, не WinInet

Смежные вопросы