Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

idTCPClient: отсылка запроса через проксю?   Найти похожие ветки 

 
Луарвик   (2004-10-16 19:36) [0]

Как? Пример. Плиз....


 
Piter ©   (2004-10-16 20:01) [1]

http://delphimaster.net/view/6-1097865516/


 
Луарвик   (2004-10-17 14:17) [2]

Э-э, нет, вроде не то... Я имел в виду, что в моей проге есть компонент idTCPClient, с помощью него отсылаю запросы. У idHTTP есть Proxy Params, а как настроить TCP, таким же образом?


 
Луарвик   (2004-10-18 15:01) [3]

ЛЮДИ!!! ХЕЛП
У idHTTP есть Proxy Params, а как настроить TCP, таким же образом?


 
Reindeer Moss Eater ©   (2004-10-18 15:03) [4]

Таким же не получится


 
Луаврик   (2004-10-18 18:11) [5]

А каким ПОЛУЧИТЬСЯ?


 
Луарвик   (2004-10-20 00:54) [6]

КАК ОТПРАВИТЬ ЗАПРОС С ПОМОЩЬЮ IdTCPClient ЧЕРЕЗ ПРОКСИ?


 
Piter ©   (2004-10-20 01:50) [7]

какого типа прокси?


 
Луарвик   (2004-10-20 19:31) [8]

Блин, я в этом не смыслю... Ну тот который вводять в браузер, чтоб его ip не вычислили :)


 
alienserg   (2004-10-20 20:32) [9]

Луаврик   (18.10.04 18:11) [5]
А каким ПОЛУЧИТЬСЯ?

Indy 9 может работать только с Socks proxy
для этого добавь IdIOHandlerSocket + IdSocksInfo

Для того, чтобы работать с HTTP proxy, надо переходить на Indy 10
Кстати, недавно наконец вышла документация на Indy 10. Всем советую.


 
Луарвик!   (2004-10-20 22:44) [10]

Ну да! А тот же idHTTP?


 
Луарвик   (2004-10-20 22:50) [11]

У того же IdFTP есть настройки прокси! Почему TCP нет?!


 
Palladin ©   (2004-10-20 22:54) [12]

Потому что http://book.itep.ru/...
если ты там что нибудь поймешь...


 
Луарвик   (2004-10-21 15:38) [13]

Не понял. Ты хоть сам понял?


 
Луарвик   (2004-10-22 23:27) [14]

Неужели никак?


 
alienserg   (2004-10-24 03:41) [15]

скачиваешь
http://www.milliseconds.webhost.ru/files/IndyFAQHTMLHelp.zip
смотришь раздел Firewalls and Proxies
и видишь:
Q. How do I use a TIdTCPClient with a HTTP Tunneling Proxy?
A. Both Indy 8.0 and Indy 9.0 do not support HTTP Tunneling proxies so you have to use Indy 10.
Q. How do I use a TIdTCPClient with a SOCKS Proxy?
A. (For Indy 9.0)
1. Create an IOHandler such as TIdIOHandlerSocket or TIdSSLIOHandlerSocket and assign the TCPClient.IOHandler property this.  
2. Create a TIdSocksInfo object and assign it to the IOHandler"s SocksInfo property.  
3. Set the TIdSocksInfo properties as required.  

Еще почитай там же
Q. How do I use Indy with a NAT (Network Address Translator)?

И вообще прочитай все, что там написано. Два-три раза.


 
Луарвик   (2004-10-24 14:33) [16]

Ну пасибо


 
GobliNGuT ©   (2004-10-25 01:16) [17]

сделай соединение с нужным портом прокси и пошли туда команду
GET www.delphimaster.ru
HTTP/1.0
Content-Type: text/html

(2 раза #10#13)
... и еще что-то - не помню, вообщем тебе надо почитать доку по протоколу HTTP. а попрактиковать умения сможешь подрубившись c помощью телнета(не забудь сделать эхо чтобы видеть что набираешь).
протокол HTTP описан в каком-то rfcХХХ - номер не помню.


 
alienserg   (2004-10-25 02:22) [18]

GobliNGuT ©   (25.10.04 01:16) [17]

Посылать http запросы через прокси не проблема. Это умеет делать TIdHttpClient.
Вопрос был, насколько я понимаю, о том, как заставить работать TIdTcpClient через прокси на низовом уровне. Connect, WriteLn, ReadLn, и т.д.


 
GobliNGuT ©   (2004-10-25 15:00) [19]

alienserg   (25.10.04 02:22) [18]

я на вопрос ответил, разжевать забыл =)
... делается это примерно так

if IdTcpClient.connect
     then
       begin
       ResStr:=IdTcpClient.ReadLn;
       ... //просмотр ответа сервера, первые 3 символа содержат
// код ответа, если 200 - то все ОК. В последующих символах можно //прочитать инфу о серваке.
        IdTcpClient.WriteLn("GET www.delphimaster.ru");
        IdTcpClient.WriteLn("HTTP/1.0");
        IdTcpClient.WriteLn("Content-Type: text/html");
        ...
        IdTcpClient.WriteLn(""); //посылка #10#13
        IdTcpClient.WriteLn("");// 2 раза!
ResStr="";
ResStr:=IdTcpClient.ReadLn;
while (ResStr="")and(timeOut<60) do ResStr:=IdTcpClient.ReadLn;

       end;


Внимание! Это не готовый код а общая идея. Аналогичную штуку я писал и она работала. код не сохранился

В idHTTP достаточно было бы воспользоваться методом GET.
А здесь приходится писать все подробно.


 
GobliNGuT ©   (2004-10-25 15:01) [20]

alienserg   (25.10.04 02:22) [18]

я на вопрос ответил, разжевать забыл =)
... делается это примерно так

if IdTcpClient.connect
     then
       begin
       ResStr:=IdTcpClient.ReadLn;
       ... //просмотр ответа сервера, первые 3 символа содержат
// код ответа, если 200 - то все ОК. В последующих символах можно //прочитать инфу о серваке.
        IdTcpClient.WriteLn("GET www.delphimaster.ru");
        IdTcpClient.WriteLn("HTTP/1.0");
        IdTcpClient.WriteLn("Content-Type: text/html");
        ...
        IdTcpClient.WriteLn(""); //посылка #10#13
        IdTcpClient.WriteLn("");// 2 раза!
ResStr="";
ResStr:=IdTcpClient.ReadLn;
while (ResStr="")and(timeOut<60) do ResStr:=IdTcpClient.ReadLn;

       end;


Внимание! Это не готовый код а общая идея. Аналогичную штуку я писал и она работала. код не сохранился

В idHTTP достаточно было бы воспользоваться методом GET.
А здесь приходится писать все подробно.


 
GobliNGuT ©   (2004-10-25 15:02) [21]

сорри за то что два раза заслал - сервак не принимал ...


 
Reindeer Moss Eater ©   (2004-10-25 15:24) [22]

     IdTcpClient.WriteLn("Content-Type: text/html");
       ...
       IdTcpClient.WriteLn(""); //посылка #10#13
       IdTcpClient.WriteLn("");// 2 раза!


Последняя строка - лишняя.


 
GobliNGuT ©   (2004-10-25 15:30) [23]

согласен


 
Луарвик   (2004-10-25 23:57) [24]

Ок, post так же работает? Знач все что мне нужно - это в TCP.Host указать хост прокси, и вуаля!
Я думал будет сложнее...


 
alienserg   (2004-10-26 19:58) [25]

GobliNGuT ©   (25.10.04 15:01) [20]

IdTcpClient.WriteLn("GET www.delphimaster.ru");
IdTcpClient.WriteLn("HTTP/1.0");
IdTcpClient.WriteLn("Content-Type: text/html");


Сработает ли вышепреведенный прием, если надо законнектиться по порту например 20847 к серверу мессенджера, который понятия не имеет, что такое HTTP протокол и GET запрос просто проигнорирует?


 
GobliNGuT ©   (2004-10-27 01:11) [26]

alienserg   (26.10.04 19:58) [25]

Естественно он игнорирует. У мессенджера насколько я понимаю должен быть свой протокол. Значит действия должны быть такого рода:
1) найти доку по протоколу мессенджера
2) подключится телнетом к порту 20847 и попробовать ручками поработать с портом, проанализировав посланные данные и полученные
3) создать в дельфи соединение TCP/IP на нужный порт
4) писать в порт данные согласно протоколу мессенджера

В целом, прием сработает, надо только изучить протокол для того чтобы знать что писать в порт.


 
alienserg   (2004-10-27 05:06) [27]

GobliNGuT ©   (27.10.04 01:11) [26]

1) найти доку по протоколу мессенджера

есть дока

2) подключится телнетом к порту 20847

По какому адресу подключиться? Ведь клиент под HTTP прокси. Клиент не может подключаться напрямую. Задача состоит в том, чтобы заставить прокси установить коннект между клиентом и внешним сервером мессенджера, который не знает, что такое команда GET. В какой момент прокси организует коннект между клиентом и внешним сервером мессенджера? После какой последовательности команд, отправленных от клиента к прокси? Каким образом клиент сообщит прокси адрес и порт сервера мессенджера?
Для простоты предположим, что клиент и сервер взяты из демошек IndyDemos\Chat\Client и Chat\Server.
Там последовательность действий предельно простая, если работать напрямую:
1. клиент коннектится по адресу/порту
2. в событии IdTCPClient1Connected клиент посылает серверу свое имя
3. сервер отвечает фразой

Извини за дотошность расспросов. Просто интересно знать, заставит ли посылка команд от клиента к прокси

IdTcpClient.WriteLn("GET messenger_server_IP");
IdTcpClient.WriteLn("HTTP/1.0");
IdTcpClient.WriteLn("Content-Type: text/html");
IdTcpClient.WriteLn("");


установить связь с сервером мессенджера. Как в таком случае клиент сообщает прокси порт, по которому нужно коннектиться?


 
Reindeer Moss Eater ©   (2004-10-27 09:12) [28]

Читай в RFC2616 про команду CONNECT


 
Slym   (2004-10-28 05:59) [29]

Пример проверки доступности странички через прокси локалки + через анонимный прокси (пложенность проксей теоретически не ограничена, включая зацикливание проксей друг на друга)

function GetResponseCode(const Response:string): Integer;
var S: string;
begin
 S := Response;
 Fetch(S);
 S := Trim(S);
 Result := StrToIntDef(Fetch(S, " ", False), -1);
end;

procedure TForm1.Button2Click(Sender: TObject);
 procedure log(const Msg:string);
 begin
   Memo1.Lines.Add(Msg);
 end;
 procedure Wln(const Msg:string);
 begin
   Log(Msg);IdTCPClient1.WriteLn(Msg);
 end;
 function Rln:string;
 var s:string;
 begin
   result:="";
   repeat
     s:=IdTCPClient1.ReadLn;
     result:=result+#13#10+s;
   until s="";
   Log(result);
 end;
begin
 try
   Memo1.Clear;
   Log("Connecting to "+IdTCPClient1.Host+":"+IntToStr(IdTCPClient1.Port)+" proxy");
   IdTCPClient1.Connect;
   try
     Log("Connected"#13#10);
     Wln("CONNECT 61.131.63.186:8080 HTTP/1.1");
     Wln("Proxy-Authorization: Basic blabla"#13#10);
     if GetResponseCode(Rln)<>200 then begin Log("Error"); exit; end;
     Wln("HEAD / HTTP/1.1");
     Wln("Host: www.MotherFucker.ru"#13#10);
     if GetResponseCode(Rln)<>200 then begin Log("Error"); exit; end;
     Log(IdTCPClient1.AllData);
   finally
     IdTCPClient1.Disconnect;
   end;
 except
   on e:exception do
   begin
     Log(E.Message);
   end;
 end;
end;



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.026 c
14-1103726378
NeyroSpace
2004-12-22 17:39
2005.01.16
DigiNet + Ati RADEON 9200 не работает


14-1104381927
Чеширский_Кот
2004-12-30 07:45
2005.01.16
Почему, по-вашему...


14-1103960552
Поручик
2004-12-25 10:42
2005.01.16
SATA


1-1104345661
GuAV
2004-12-29 21:41
2005.01.16
DllEntryPoint( .. DLL_PROCESS_DETACH .. ) => finalization ?


8-1097320898
Delphis
2004-10-09 15:21
2005.01.16
Фоновый звук