Здравствуйте, intr21, Вы писали:
I>Здравствуйте, intr21, Вы писали:
I>>Может, кто знает, как заставить работать такой клиент через
I>>авторизующую проксю?
I>Если кому интересно, то решение проблемы я нашёл.
I>Возможно, не самое верное и изящное, но однако оно работает.
I>У меня есть класс-обёртка CMyClass, унаследованный от CSoapSocketClientT.
I>Этот класс генерирует визард при добавлении Web Reference.
I>Меняю предка на CSoapWininetClient.
I>Добавляю метод CMyClass::SwitchProxy()
I>Весь код далее приведён для этого метода.
I>Сначала устанавливаю адрес:порт прокси сервера, используя нулевой хендл.
I>Тут всё в соответствии с msdn, без всяких хитростей.
I>I>BOOL bRes;
I>INTERNET_PROXY_INFO ipi;
I>ipi.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
I>ipi.lpszProxy = szAddrPort; // в виде "abc.def.ru:xxxx" или "xxx.xxx.xxx:xxxx"
I>ipi.lpszProxyBypass = NULL;
I>bRes = InternetSetOption( NULL, INTERNET_OPTION_PROXY, &ipi, sizeof(ipi) );
I>
I>Проблема в том, что вызов InternetSetOption для установки параметров авторизации
I>( INTERNET_OPTION_PROXY_USERNAME и INTERNET_OPTION_PROXY_PASSWORD ) с нулевым
I>хендлом делать нельзя.
I>Тогда делаю так. Генерирую ложный запрос:
I>I>SendRequest(_T("any fake request\r\n"));
I>
I>Это необходимо для того, чтобы проинициализировать член m_hConnection.
I>Финт здесь в следующем: несмотря на то, что запрос этот оказывается неудачным
I>(поскольку прокси-сервер у нас с авторизацией, а данные для авторизации мы не задали),
I>m_hConnection после этого всё же ненулевой и сохраняет своё значение
I>для последущих вызовов SendRequest.
I>На этом я и сыграл.
I>Никакой другой альтернативы найти не удалось.
I>Так вот, далее, для уже НЕнулевого m_hConnection:
I>I>bRes = InternetSetOption( m_hConnection, INTERNET_OPTION_PROXY_USERNAME, m_szUser, lstrlen( m_szUser )+1 );
I>bRes = InternetSetOption( m_hConnection, INTERNET_OPTION_PROXY_PASSWORD, m_szPass, lstrlen( m_szPass )+1 );
I>
I>Проверяю bRes == TRUE для обоих вызовов. Всё ок.
I>Настройка прокси и авторизации закончена.
I>Теперь в SOAP-методе класса-обёртки делаю два вызова:
I>I>SwitchProxy();
I>
I>а затем вызов метода на сервере — в моём тестовом примере это выглядело так:
I>I>SendRequest(_T("SOAPAction: \"http://www50.brinkster.com/vbfacileinpt/np/GetPrimeNumbers\"\r\n"));
I>
I>Получаю результат.
Молодец

, возможно это поможет и мне в будущем
I>Юрий.