![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавление в программу «Работа через proxy - сервер» [D7, Win2k, WinXP]
Ruzzz © (2008-08-03 15:12:00)Нужно добвить возможность работы через прокси-сервера которые не поддерживают CONNECT, т.е. возможность использовать GET и POST.
Подскажите где копать, с чего начатью Спасибо!
FireMan_Alexey (2009-03-01 12:08:00) [1]>>xim12
Uses Winsock или Winsock2(если найдеш) :)
xim12 (2009-03-01 09:15:00) [2]FAddr.sin_addr.s_addr := InetAddr(ProxyHost);
FAddr.sin_port := htons(ProxyPort);
delphi 7. Вот в этом пишет ошибку InetAddr и htons
DVM (2008-08-06 11:06:00) [3]
> Подскажите где копать, с чего начатью Спасибо!
Чтобы запрос можно было сделать через прокси, то надо лишь слегка этот запрос модифицировать, ну и подключаться само собой надо к прокси, а не к HTTP серверу и запрос слать опять же прокси.
Вот этот кусочек кода думаю прояснит отличия:
ZeroMemory(@FAddr, SizeOf(FAddr));
FAddr.sin_family := PF_INET;
if UseProxy then
begin
FRequest := 'GET http://' + Host + ':' + inttostr(Port) + Path + ' HTTP/' + HTTPVersion + CRLF +
'Host: ' + Host + ':' + inttostr(Port) + CRLF +
'User-Agent: Mozilla/5.0' + CRLF +
'Accept: */*' + CRLF +
'Keep-Alive: 300' + CRLF +
'Connection: keep-alive';
if BasicAuthorization then FRequest := FRequest + CRLF + 'Authorization: Basic ' + EncodeBase64(UserName + ':' + Password);
if ProxyBasicAuthorization then FRequest := FRequest + CRLF + 'Proxy-Authorization: Basic ' + EncodeBase64(ProxyUserName + ':' + ProxyPassword);
FRequest := FRequest + CRLFCRLF;
FAddr.sin_addr.s_addr := InetAddr(ProxyHost);
FAddr.sin_port := htons(ProxyPort);
end
else
begin
FRequest := 'GET ' + Path + ' HTTP/' + HTTPVersion + CRLF +
'Host: ' + Host + ':' + inttostr(Port) + CRLF +
'User-Agent: Mozilla/5.0' + CRLF +
'Accept: */*' + CRLF +
'Keep-Alive: 300' + CRLF +
'Connection: keep-alive';
if BasicAuthorization then FRequest := FRequest + CRLF + 'Authorization: Basic ' + EncodeBase64(UserName + ':' + Password);
FRequest := FRequest + CRLFCRLF;
FAddr.sin_addr.s_addr := InetAddr(Host);
FAddr.sin_port := htons(Port);
end;
Slym (2008-08-03 18:06:00) [4]Начать с протокола...
что за протокол? если HTTP то без проблем пройдет через прокси...
если НЕТ: то облажался :)...
прокси- это HTTPproxy и ничего кроме HTTP не может "проксировать". метод CONNECT позволяет расширить возможности протокола, но в проксях он разрешен (из соображений безопасности) зачастую на ограниченный список портов: 443, ... и пожалуй все :) кстати и прочие методы дальше 80-83, 8080, 3128 нечасто уходят, поэтому ими и проксях и ограничены
решение если не HTTP:
1. перейти на HTTP... коснется и клиента и сервера
2. написать WEB приблуду-конвертер... коснется и клиента и сервера