Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.028 c
11-1085338509
puky
2004-05-23 22:55
2005.01.16
Видели ?


1-1104212473
N0thing
2004-12-28 08:41
2005.01.16
Как получить код символа?


14-1104217657
vecna
2004-12-28 10:07
2005.01.16
Я плякал...


14-1104219018
NewDelpher
2004-12-28 10:30
2005.01.16
Солдаты Великой Отечественной


14-1104216666
BiN
2004-12-28 09:51
2005.01.16
Опрос. Как вы относитесь к памаранчевым веткам на DM?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский