Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.36.192] |
|
Сообщ.
#1
,
|
|
|
Возможно ли использовать запросы CInternetSession через SOCKS прокси?
Пробовал так: CInternetSession m_session; CString FullProxyAddr(L"127.0.0.1:3128"); INTERNET_PROXY_INFO pi; pi.dwAccessType = INTERNET_OPEN_TYPE_PROXY; pi.lpszProxy = FullProxyAddr; pi.lpszProxyBypass = _T(""); m_session.SetOption(INTERNET_OPTION_PROXY, &pi, sizeof(pi)); HTTPfile = (CHttpFile *)m_session.OpenURL(L"https://ya.ru", 1, INTERNET_FLAG_TRANSFER_ASCII | INTERNET_FLAG_SECURE | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_PRAGMA_NOCACHE); Возникло две проблемы: 1. Соединение не устанавливается - ошибка 12029 2. После вызова m_session.SetOption(INTERNET_OPTION_PROXY, &pi, sizeof(pi)) соединение всегда пытается установиться через 0.0.0.1:80, даже после того, как в структуре передать INTERNET_OPEN_TYPE_DIRECT или INTERNET_OPEN_TYPE_PRECONFIG, т.е., оно установилось через неправильный прокси и не меняется уже почему-то. Как это всё победить? |
Сообщ.
#2
,
|
|
|
Заработало вот так:
//через прокси pi.dwAccessType = INTERNET_OPEN_TYPE_PROXY; pi.lpszProxy = (LPCTSTR)"socks=127.0.0.1:3128"; pi.lpszProxyBypass = (LPCTSTR)("127.0.0.1"); //без прокси pi.dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG;//можно INTERNET_OPEN_TYPE_DIRECT pi.lpszProxy = NULL; pi.lpszProxyBypass = NULL; НО! У меня на форме галка "Использовать прокси". Запускаю приложение - галка не установлена, соединение идет напрямую. Ставлю галку - соединение идет через прокси. Снимаю галку - соединение идет через прокси, при этом SetOption с INTERNET_OPEN_TYPE_DIRECT отрабатывает. Перезапускаю приложение, галка снята - соединение идет напрямую. Как сделать, чтобы заработало нормально? |
Сообщ.
#3
,
|
|
|
Почему-то соединение не завершается даже после удаления всех объектов, связанных с CInternetSession и самого CInternetSession:
m_pSession->Close(); InternetCloseHandle((HINTERNET)m_pSession); delete m_pSession; m_pSession = NULL; И при следующем запросе используется текущее соединение... Соединение завершается только при закрытии приложения ( |