Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
misha-mzs
1

MFC/CinternetSession. Странное поведение при использовании прокси

22.05.2012, 22:36. Просмотров 1224. Ответов 1
Метки нет (Все метки)

Нужно было добавить в проект проверку валидности прокси серверов. Алгоритм работы простой:
1. Пытаюсь соединиться с конкретным сервером через прокси.
2. Получаю содержимое страницы (это адрес с которого зашли не нее).
3. Соединяюсь с тем же сервером напрямую.
4. Сверяю адреса, если они совпадают то прокси не анонимный.

Но по какой-то причине после того как программа соединиться с первым прокси, то попытка получить соединение через другой прокси, или напрямую не приносит успеха. Когда я считываю адрес то получаю всегда адрес первого прокси.
Через некоторое время пробных попыток запуска, проверка все же начинает работать правильно. но достаточно перезагрузить Windows и начинается все сначала.

Что я делаю не так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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;
}

Я убрал все лишнее из проекта и оставил только это проверку. Вот оно http://dl.dropbox.com/u/106699... t_site.zip
Сначала думал что проблема в указателях, потому перешел на auto_ptr. Не помогло.
Помогите. Уже мозг сломал, но не вижу ошибку.
Вложения
Тип файла: zip internet_site.zip (146.5 Кб, 6 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2012, 22:36
Ответы с готовыми решениями:

Странное предупреждение при использовании #ifndef-#endif
Создаю заголовочный файл: #ifndef EXAMPLE_H #define EXAMPLE_H bool Abrakadabra(int a); ...

Ошибка при объявлении CInternetSession
Win XP SP3, MS Visual C++ 2008 Создаю проект &quot;_aa_&quot; MFC Application, NetFrameWork 3.5 Dialog...

Странное поведение if
День добрый. Работаю в VS. Столкнулся с тем, что условие if (signal.size() - len_st&gt;0) в коде...

Странное поведение VS 2017
Добрый день. Заметил странное поведение студии. У меня есть две функции : LPWSTR GetCurrentPath()...

1
misha-mzs
23.05.2012, 21:53 2
Решил проблему. Добавил нужные флаги.

C++
1
2
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));
Аналогично для другой функции
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2012, 21:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Странное поведение указателя
class XMLDocument { public: char *xml; XMLDocument() { }; void NewXML()

Странное поведение bool
Помогал отлаживать код и мы наткнулись на удивительное. Кодер скрыл отображение варнингов в...

Странное поведение операторов new и delete
Здравствуйте! Возникла следующая проблема. В приложении MFC есть два немодальных диалога, которые...

Visual Studio странное поведение
Почему данный код компилируется и нормально работает в Visual Studio, не выдавая никаких ошибок?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.