Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > wininet и связь с через прокси на HTTPS


Автор: En_t_end 31.8.2005, 14:31
У меня проблема с сабжем. Я пытаюсь залогиниться на проксе следующим образом:
Код

session = InternetOpen("Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914) ", INTERNET_OPEN_TYPE_PROXY, ProxyAddress(IP_PROXY, PORT_PROXY, buffer), "", 0);
                  InternetSetOption(session, INTERNET_OPTION_PROXY_USERNAME, (LPVOID)LOGIN, lstrlen(LOGIN));
        InternetSetOption(session, INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)PASSWORD, lstrlen(PASSWORD));

Но постоянно получаю вместо нужного мне инфы страницу, о том, что логин или пасс - не верны. Страница сгенерированна проксей. Прокся живет на HTTPS. Логин и пас - верны.
Функция ProxyAddress - формирует строку типа "ip:port" , являющейся полным адресом для прокси.
Что делать ?

Автор: Coocky 1.9.2005, 12:04
не знаю...
Меня здесь много, что напрягает..
Код

session = InternetOpen("Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914) ", INTERNET_OPEN_TYPE_PROXY, ProxyAddress(IP_PROXY, PORT_PROXY, buffer), "", 0);


ProxyAddress(IP_PROXY, PORT_PROXY, buffer), "",
Вызывает сомнения...
Давай на МФС запрос сделаем?

Автор: En_t_end 1.9.2005, 13:33
Coocky
Это пока ещё не запрос - это только инициализация сокетов и других вещей под оболочкой wininet.

Цитата(Coocky @ 1.9.2005, 16:04)
ProxyAddress(IP_PROXY, PORT_PROXY, buffer)

Вот исходник этой функции:
Код

char *ProxyAddress(const char *IP, const unsigned int PORT, char *buffer)
{
    char buff2[11];
    lstrcpy(buffer, IP);lstrcat(buffer, ":");lstrcat(buffer, itoa(PORT, buff2, 10));
    return buffer;
}

Может, раз прокся висит на https , то надо формировать адрес вот так? :
https://127.0.0.1:3128
Видел в инете полодобное, но ведь это не верно, ибо запись https:// - это и есть указание на какой порт вести соединение.

Автор: Coocky 1.9.2005, 13:56
Цитата(En_t_end @ 1.9.2005, 13:33)
Это пока ещё не запрос - это только инициализация сокетов и других вещей под оболочкой wininet.

smile
Но вот же твои слова!

Цитата(En_t_end @ 31.8.2005, 14:31)
Но постоянно получаю вместо нужного мне инфы страницу, о том, что логин или пасс - не верны.

Как это-получаю, не делая запрос?

Автор: En_t_end 1.9.2005, 15:13
Coocky
А ты про это smile
Ну тогда вот запрос к примеру:
doc = InternetOpenUrl(session, url, 0, 0, 0, 0);
Только что он тебе скажет ? smile
Проблема именно в инициализации, что-то там не так, раз прокся не дает логиниться.
Добавлено @ 15:14
url = "http://forum.vingrad.ru/"

Автор: Coocky 1.9.2005, 16:59
En_t_end
А я говорю-пробуй через МФС!
Там, кстати, все нормально должно быть.
http://aleksandr-frolov-grigoriy-frolov.planetaknig.ru/read/29015-5.html

Автор: En_t_end 1.9.2005, 17:57
Coocky
Спасибо, попробую, но мне надо через wininet. Дело в том, что у меня dll без поддержки mfc. А приложение на mfc. Специально, чтобы получить более высокую скорость.

Автор: Coocky 1.9.2005, 21:04
En_t_end
Цитата(En_t_end @ 1.9.2005, 17:57)
Спасибо, попробую, но мне надо через wininet

Не через WinInet а WinAPI smile
Есть у меня тесты по скорости, если ты имеешь ввиду это. МФС если не превосходит, то не уступает, это точно.
Я все "сорцы" на уши поднял! Они мне тм твердили, мол АПИ быстрее.. Чушь. Там две проги- на МФС и АПИ. МФС быстрее на 1.2%

Автор: En_t_end 2.9.2005, 06:50
Coocky
Цитата(Coocky @ 2.9.2005, 01:04)
Не через WinInet а WinAPI

WinInet - это оболочка сокетов в WinApi. Если на чистом WinApi, то тогда через голые сокеты. WinInet.dll - кстати создавался для IE. Поэтому, стандартной библиотекой в WinApi WinInet назвать сложно. Вот винсокеты - это да - это чистый WinApi.

Автор: Петрович 19.10.2005, 18:34
Цитата(En_t_end @ 31.8.2005, 15:31)
Но постоянно получаю вместо нужного мне инфы страницу, о том, что логин или пасс - не верны. Страница сгенерированна проксей. Прокся живет на HTTPS. Логин и пас - верны.


А ты посмотри результаты возвращаемые вызовами:
Код

InternetSetOption(session, INTERNET_OPTION_PROXY_USERNAME, (LPVOID)LOGIN, lstrlen(LOGIN));
InternetSetOption(session, INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)PASSWORD, lstrlen(PASSWORD));

С одной стороны будешь удивлен, но с другой, поймешь почему "логин или пасс - не верны". smile
Лично у меня, подобные вызовы, правда на Delphi, возвращают False, а последующий GetLastError - ERROR_INTERNET_INCORRECT_HANDLE_TYPE !
Вот теперь сижу и думаю. А как еще можно в WinInet передать имя и пароль для Proxy-сервера.

Автор: DeadSoul 19.10.2005, 20:01
Цитата(Coocky @ 1.9.2005, 12:04)
INTERNET_OPEN_TYPE_PROXY, ProxyAddress

Не надо таких флагом. Проще использовать флаги "Использовать настройки IE"

Цитата(Coocky @ 1.9.2005, 12:04)
Давай на МФС запрос сделаем?

Нет. На MFC через проксю с паролем не прорвешься

Автор: Петрович 19.10.2005, 20:51
Цитата(DeadSoul @ 19.10.2005, 21:01)
Проще использовать флаги "Использовать настройки IE"

Если имеется ввиду INTERNET_OPEN_TYPE_PRECONFIG, то не помогает. На proxy он уходит, но аутентификацию не проходит.
Я для теста поставил себе проксю CCProxy 6.2. В IE ручками указал его адрес и порт. Теперь, когда я запускаю IE и прошу первую страницу в IE, он вывешивает окно с запросом имени и пароля на проксю.
А если я делаю через WinInet с INTERNET_OPEN_TYPE_PRECONFIG, то никакого запроса не появляется, а сразу возвращается ответ '407: Unauthorized', и страница с сообщением о неуспешной авторизации. Т.е. результат такой как если в IE при запросе имени и пароля нажать Cancel.

Автор: Helcar 14.9.2007, 10:48
Код

InternetSetOption(session, INTERNET_OPTION_PROXY_USERNAME, (LPVOID)LOGIN, lstrlen(LOGIN));
InternetSetOption(session, INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)PASSWORD, lstrlen(PASSWORD));


на сколько я помню обе функции в качестве первого параметра принимают результат  InternetConnect. 

Автор: Петрович 17.9.2007, 01:24
Угу. Это верно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)