![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как пакеты через прокси пустить
Succumb © (2006-10-14 17:16:00)Привет. Есть прога, которая через TTcpClient посылает пакеты, и собственно их принемает %) Как заставить прогу, делать это через прокси? тоесть каким компонентом, каким оператором, ф-цией и т.д.?
http прокся, без авторизации(если это важно), пакеты в проге через 80ый порт идут.
DVM (2006-10-17 15:34:00) [1]
FRequest := 'GET http://' + FHost + ':' + inttostr(FPort) + FPath + ' HTTP/' + FHTTPVersion + #13#10 +
'Accept: */*' + #13#10 +
'Pragma: no-cache' + #13#10 +
'User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Win32)' + #13#10 +
'Host: ' + FHost + ':' + inttostr(FPort) + #13#10;
if FUserName <> '' then FRequest := FRequest + 'Authorization: Basic ' + EncodeBase64(FUserName + ':' + FPassword) + #13#10;
if FProxyUserName <> '' then FRequest := FRequest + 'Proxy-Authorization: Basic ' + EncodeBase64(FProxyUserName + ':' + FProxyPassword) + #13#10;
FRequest := FRequest + 'Connection: Keep-Alive' + #13#10#13#10;
FAddr.sin_addr.s_addr := inet_addr(PChar(GetIPAddress(FProxyHost)));
FAddr.sin_port := htons(FProxyPort);
Пусик (2006-10-16 20:05:00) [2]
> и этот метод разрешен сисадмином
Еще стоит добавить, если админом разрешен доступ в интенет;)
umbra (2006-10-16 19:33:00) [3]2 Пусик © (16.10.06 18:47) [18]
и этот метод разрешен сисадмином
Пусик (2006-10-16 18:47:00) [4]
> Ну с этого нужно было и начинать, что по хттп-протоколу,
> иначе не получится.
</
> Если не http - забудь, т.к. прокся у тебя http.
I>
Протокол не имеет значения, если прокси поддерживает метод connect.
Ketmar (2006-10-16 18:12:00) [5]>[16] SergP(c) 16-Oct-2006, 17:21
угу. я так за Оперой наблюдал. сколько мусора она передаёт, оказывается! %-)
SergP (2006-10-16 17:21:00) [6]лучше всего взять браузер и законектиться сначала без прокси, а потом через прокси, открыть любой сайт, просмотреть снифером чего он передает и увидеть разницу в запросах с прокси и без прокси...
Можно конечноьи почитать что-нить, но в любом случае посмотреть на наглядный пример не помешает.
umbra (2006-10-16 11:38:00) [7]
> Извени, не смог найти его в палитре делфи, не подскажешь
> где он находится?
>
Для Д7 и больше - вкладка Indy Clients
Ketmar (2006-10-16 02:21:00) [8]ещё можно вместо "connection: close" писать "HTTP/1.0". но некоторые сервера обижаются. но очень некоторые. а лучше -- и то, и то. и ещё "proxy-connection: close".
Succumb (2006-10-16 02:18:00) [9]Ketmar © (16.10.06 02:15) [12]
учту ;)
Ketmar (2006-10-16 02:15:00) [10]кстати, обычно достаточно #10, а не CRLF. хотя CRLF надёжней. %-)
Succumb (2006-10-16 02:11:00) [11]Ketmar © (16.10.06 02:07) [9]
О, пасибо. Оно заработало %)
Succumb (2006-10-16 02:10:00) [12]
> Я так понял нужно написать http-клиент работающий через
> прокси? он уже есть - TIdHTTP. Он имеет встроенные средства
> для работы с прокси.
Извени, не смог найти его в палитре делфи, не подскажешь где он находится?
Ketmar (2006-10-16 02:07:00) [13]в GET для прокси рекомендуют прописывать полный URL.
Succumb (2006-10-16 01:54:00) [14]Орион © (14.10.06 21:12) [5]
неполучается =/
делаю примерно так:
var
url := 'GET /somepage'+IntToStr(i)+'.htm HTTP/1.1' + CRLF + 'Host: somehost.ru' CRLF + 'Connection: close' + CRLF;
remotehost := '123.123.123.123'; //proxy
remoteport := '80'; //порт прокси
Connect();
...
SendLn(url);
Выдаёт:
Server Error
The following error occurred:
[code=BAD_URL] An invalid URL was detected. The appliance cannot serve the request as entered.
------------------------------------
Please contact the administrator.
Прокси 100% рабочая. Я что-то не так делаю?
SergP © (15.10.06 10:38) [7]
Сорри, просто я подумал, что этото топик более подходит под тематику вопроса.
> (заголовок хттп-запроса при прямом конекте отличается от
> такого же заголовка при конекте через прокси)
подскажи пожалуйсто, как он должен выглядить?
SergP (2006-10-15 10:38:00) [15]> [3] Succumb (14.10.06 21:07)
> Именно по хттп протоколу.
> Уху, весело ;)
Ну с этого нужно было и начинать, что по хттп-протоколу, иначе не получится.
Да и зачем создавать одинаковые ветки:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1160771283&n=18
?
А по сабжу: конектишься не к требуемому серверу, а к прокси. Но заголовок хттп-запроса меняешь в соответствии с требованиями (заголовок хттп-запроса при прямом конекте отличается от такого же заголовка при конекте через прокси)
Eraser (2006-10-14 23:21:00) [16]> [0] Succumb (14.10.06 17:16)
вопрос как-то сумбурно задан. Я так понял нужно написать http-клиент работающий через прокси? он уже есть - TIdHTTP. Он имеет встроенные средства для работы с прокси.
Орион (2006-10-14 21:12:00) [17]> [3] Succumb (14.10.06 21:07)
т.е. например ты хочешь запросить главную страничку Гугла:
- формируешь запрос, с полем "Host: google.ru"
- коннектишся на порт 80 сервера google.ru
- передаешь запрос серверу, получаешь ответ.
Работа через прокси:
- формируешь запрос, с полем "Host: google.ru"
- коннектишся на порт и хост прокси-сервера
- передаешь запрос серверу, получаешь ответ.
Орион (2006-10-14 21:09:00) [18]> [3] Succumb (14.10.06 21:07)
Тогда все просто. Коннекти свой TTCPClient на хост/порт прокси и работай с ним.
Succumb (2006-10-14 21:07:00) [19]Именно по хттп протоколу.
Уху, весело ;)
Орион (2006-10-14 21:03:00) [20]"Как заставить прогу, делать это..."
Гы-гы)) Я сеня в особенном настроении))