2015-06-28 2 views
3

У меня есть простая программа winsock, и я хочу передать свое соединение через системный прокси. Я видел сообщение, которое объясняет, как поймать системный прокси, а затем отправить строку, как показано ниже:Настройки прокси-сервера системы Winsock

CONNECT 127.0.0.1:8080 HTTP/1.0\r\n 

и так далее. Но это не работает точно все время. С другой стороны, при использовании WinInet API (функция InternetOpen() и ...) он отлично работает. Мне нужно решение вроде WinInet, которое работает правильно всегда и двунаправленная функциональность, такая как Winsocket.

+0

двунаправленная функциональность: отправка и получение одновременно не запрос-ответ, как HTTP-протокол – QCoder

ответ

2

Нет такой вещи, как «системный прокси». Параметры прокси-сервера WinInet являются частью только WinInet, а не самой Windows (Internet Explorer использует WinInet, поэтому настройки WinInet влияют на IE, но не на WinSock).

CONNECT 127.0.0.1:8080 HTTP/1.0\r\n\r\n - это строка соединения для установления туннеля через HTTP-прокси-сервер (см. Tunneling with HTTP CONNECT). Вы подключаетесь к прокси-серверу, отправляете команду CONNECT, чтобы подключить ее к целевому серверу, проверить ответ, и в случае успеха вы можете осуществлять двунаправленную связь с целевым сервером, как если бы вы напрямую подключились к нему.

Но есть другие виды прокси, такие как SOCKS. Такая же концепция (подключаться к прокси, запрашивать подключение к цели, продолжать нормально после этого), но очень отличается от протокола HTTP.

При кодировании с помощью WinSock вам необходимо реализовать различные прокси-протоколы вручную в своем собственном коде или найти стороннюю библиотеку для обработки ее для вас. WinSock не имеет встроенной поддержки прокси. И вы должны заранее знать, какой тип прокси используется, поэтому вы можете использовать правильный протокол. Существуют API-интерфейсы для динамического определения параметров прокси-сервера или просто попросите пользователя предоставить данные.

+0

Ваш ответ верный, но есть ли какие-либо решения, чтобы wininet вести себя как winsock. – QCoder

+0

Поведение вроде как каким образом? Пожалуйста, будьте более конкретными. –

+0

В режиме winsock я могу свободно вызывать recv() и отправлять() каждый раз, когда хочу, но в WinInet у меня должен быть ответ после запроса, и сервер не может запросить клиента (обратную связь). – QCoder

Смежные вопросы