Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[net] как из своей программы общаться с сервером через proxy? 25.08.09 13:47
Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 25.08.09 13:49 Количество правок: 1
|
Вот, например, в браузере Opera в разделе настроек "Настройки->Дополнительно->Сеть->Прокси" можно задать прокси серверы и весь трафик будет идти через них, а как добиться такого же в своей программе?
Мне известно два вида прокси: SOCKS и HTTP Proxy, один из них я даже реализовывал собственноручно и использовал его на локальной машине. Но то, как пользоватся услугами стороннего PROXY понять не могу.
Вот я пишу программу (на C++), которая взаимодействует с Интернетом через сокеты. Без Прокси механизм работы с сокетами мне понятен, а вот с прокси труба. Выручайте.
Да, и ещё вопрос в догонку: есть ли какая-то принципиальная разница в программировании доступа через прокси для SOCKS и HTTP Proxy, или с точки зрения меня, как пользователя прокси, это программирование будет одинаковым?
|
|
[Win32] Под вендой? 25.08.09 20:06
Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 25.08.09 20:35 Количество правок: 1
|
> Мне известно два вида прокси: SOCKS и HTTP Proxy, один из > них я даже реализовывал собственноручно и использовал его > на локальной машине. Но то, как пользоватся услугами > стороннего PROXY понять не могу. Предположим, ты пишешь браузер.
Без прокси что делаем?
1) Создаём объект обычного сокета;
2) командуем ему делать коннект к удалённому веб-серверу. Имя в IP резольвится у нас локально, всей кухней с DNS занимается венда.
3) пишем в сокет HTTP заголовки, сокет отсылает их веб-серверу напрямую;
4) получаем ответ сервера, рендерим страницу.
С HTTP поркси что делаем?
1) Создаём объект обычного сокета;
2) Даём ему команду подключиться к HTTP прокси;
3) пишем в сокет HTTP заголовки, прокси их получает и дальше сам шлёт куда надо, имя в IP резольвит прокси, нам не нужен DNS;
4) получаем ответ прокси, рендерим страницу.
С SOCKS прокси что делаем?
1) Создаём объект проксированного сокета, который умеет общаться c SOCKS-прокси по протоколу SOCKS4 или SOCKS5.
2) даём команду объекту сокета приконнектиктся к удалённому серверу. Прокси сам резольвит имена, нам не нужен DNS.
3) Пишем в сокет HTTP заголовки, сокет на своём нижнем уровне пересылает двоичный поток прокси, прокси шлёт их дальше;
4) сокет получаем ответ прокси, выкусывает бинарный контент в соотв. с протоколам, отдаёт твоей проге, прога рендерит страницу.
Где взять классы проксированных сокетов? Не знаю, я не плюсист.
> Вот я пишу программу (на C++), которая взаимодействует с > Интернетом через сокеты. Без Прокси механизм работы с > сокетами мне понятен, а вот с прокси труба. Выручайте. Если твоя программа взаимодействует не просто по TCP, а по протоколу HTTP, тогда ей подойдут HTTP прокси, HTTP сам по себе легко проксируется, потому что не содержит информации о состоянии, и может пересылаться от прокси к прокси, к серверам, от них к проксям и тебе обратно ;-)
> Да, и ещё вопрос в догонку: есть ли какая-то принципиальная > разница в программировании доступа через прокси для SOCKS и > HTTP Proxy, или с точки зрения меня, как пользователя > прокси, это программирование будет одинаковым? Даа... SOCKS4 и SOCKS5 кури двоичные протоколы.
У них есть состояние, дексрипторы, идентификаторы комманд и проч.
Но они прикольны тем, что:
1) Бинарные, т.е. работают на уровне TCP, а не HTTP.
2) Программа может открыть сокет на прокси, который будет слушать на определённом порту (если он там не занят), и перенаправлять к тебе запросы на подключение.
Такие, пироги.
Я в своё время писал софтину, которая должна была брать инфу по протоколу HTTP, тупо используя настройки, вбитые в IE.
И вот, для этого чудесно подошёл COM-объект, который прекрасно знают все, кто юзал AJAX, и называется он Microsoft.XMLHTTP, с его методами и событиями. Всё хорошо в том плане, что он юзает настройки прокси, вбитые в IE6, и всю работу делает сам.
Ну а ещё можешь погонять функции из виндовой стандартной либы WinInet.dll, информацию по её функциям ищи в MSDN. Она тоже много чего может, и с прокси может взаимодействовать сама, юзая или что в IE, или сам можешь указать их конфигурацию.
Удачи.
|
| |
[Net] Большое спасибо! Как всегда всё разложил по полочкам ;-) 26.08.09 06:23
Автор: Vedrus <Serokhvostov Anton> Статус: Member
|
|
|
|