Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как подкл. ч-з TCPClient, отправить строку "GET" и пол.ответ ? [D7, WinXP]


Страницы:   1 2 3

jiny ©   (2007-02-21 10:55:00) 

пишу свой прокси
Задача следующая :
уже получив набор строк из браузера клиента переслать или запросить информацию в текст. виде и переправить ее обратно браузеру клиента. С отправкой клиенту проблем не возникает, но вот с расшифровкой строки принимаемой от браузера возникли вопросы, я попробовал сделать так

TCPClient1.RemoteHost:=' http://www.microsoft.com/';
TcpClient1.RemotePort:='80';
try
if TcpClient1.Connect then
 TcpClient1.SendLn(ClientMsg); //ClientMsg - TStringList  с данными сервера
finally
 TcpClient1.Disconnect;
end;

На ресив TCpclient1 повесил брейк-поинт, но он даже конект не делает, может кто подскажет в чем моя ошибка.
Кстати вот содержание ClientMsg :

GET http://www.microsoft.com/isapi/redir.dll?prd=ie&pver=6&ar=msnhomeHTTP/1.0
Accept: */*
Accept-Language: ru
Cookie: MC1=GUID=fe7348d142c91b40a26bf562220e9b88&HASH=d148&LV=200611&V=3; MUID=BEE4C539D05442C7907EBB76CBA42D4C; WT_FPC=id=82.200.227.194-3914840032.29820858:lv=1164137504625:ss=1164137204375; A=I&I=AxUFAAAAAAAvCAAAnEZp2o9I7aQf9fqcg70spw!!
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.microsoft.com
Proxy-Connection: Keep-Alive


SlymRO   (2007-02-22 12:58:00) [1]

Анализируй:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, Forms,
 StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
 IdTCPClient, IdAntiFreezeBase, IdAntiFreeze, ExtCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   Panel1: TPanel;
   Proxy: TEdit;
   Button2: TButton;
   Label1: TLabel;
   Memo2: TMemo;
   procedure Button2Click(Sender: TObject);
 private
 public
   procedure OnWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
 end;

var
 Form1: TForm1;

implementation
uses IdGlobal;
{$R *.dfm}

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);
var
 IdTCPClient1:TIdTCPClient;
 str:string;
 procedure log(const Msg:string);
 begin
   Memo1.Lines.Add(DateTimeToStr(Now));
   Memo1.Lines.Add(Msg);
 end;
 procedure Wln(const Msg:string);
 begin
   Log(Msg);IdTCPClient1.IOHandler.WriteLn(Msg);
 end;
 procedure W(const Msg:string);
 begin
   Log(Msg+#13#10);IdTCPClient1.IOHandler.Write(Msg);
 end;
 function Rln:string;
 var s:string;
 begin
   result:='';
   repeat
     s:=IdTCPClient1.IOHandler.ReadLn;
     result:=result+#13#10+s;
   until s='';
   Log(result);
 end;
begin
 try
   Memo1.Clear;
   Application.ProcessMessages;
   IdTCPClient1:=TIdTCPClient.Create;
   try
     IdTCPClient1.OnWork:=OnWork;
     IdTCPClient1.ConnectTimeout:=30000;
     IdTCPClient1.ReadTimeout:=30000;
     str:=Trim(Proxy.Text);
     IdTCPClient1.Host:=Fetch(str,':');
     IdTCPClient1.Port:=StrToInt(str);
     Log('Connecting to '+IdTCPClient1.Host+':'+IntToStr(IdTCPClient1.Port)+' proxy');
     IdTCPClient1.Connect;
     Log('Connected'#13#10);
     Wln('CONNECT delphimaster.ru:80 HTTP/1.1'#13#10);
     if GetResponseCode(Rln)<>200 then begin Log('Error'); exit; end;
     Wln('POST http://delphimaster.ru/cgi-bin/forum.plHTTP/1.0'#13#10+
         'Host: delphimaster.ru'#13#10+
         'Accept: */*'#13#10+
         'Accept-Language: ru'#13#10+
         'Connection: Close'#13#10+
         'Content-Type: application/x-www-form-urlencoded'#13#10+
         'Content-Length: '+IntToStr(length(Memo2.lines.Text))+#13#10);
     W(Memo2.lines.text);
     if GetResponseCode(Rln)<>200 then begin Log('Error'); exit; end;
     Log(IdTCPClient1.IOHandler.AllData);
   finally
     IdTCPClient1.Free;
   end;
 except
   on e:exception do
   begin
     Log(E.Message);
   end;
 end;
end;

procedure TForm1.OnWork(ASender: TObject; AWorkMode: TWorkMode;
 AWorkCount: Integer);
begin
 Caption:=IntToStr(AWorkCount);
end;

end.


Reindeer Moss Eater   (2007-02-22 12:51:00) [2]

Пробовал до дисконекта сервера, он не отключается, до упора висит
А я тебе что говорил?
Когда надо до дисконнекта читать?

Короче в сад.


jiny   (2007-02-22 12:50:00) [3]

Не учел того, что страница зачастую разделена на фреймы
Пробовал до дисконекта сервера, он не отключается, до упора висит
пробовал на условие #13#10#13#10 та же беда, обрывается прием данных с сервер


Reindeer Moss Eater   (2007-02-22 12:46:00) [4]

На, найди свой тэг вот здесь

http://www.cbr.ru/scripts/XML_daily.asp


Reindeer Moss Eater   (2007-02-22 12:46:00) [5]

но в цикле я ищу тэг </HTML>

А собственно кто тебе сказал, что надо искать какой-то та тэг?
Да еще и </HTML> ???


jiny   (2007-02-22 12:41:00) [6]

Посыл данных пошел на сервер
Прием данным с онного начался
но по какой то причине при ReceiveLn пошли пустые строки с сервака, часть страницы браузер клиента даже подгрузил, но в цикле я ищу тэг </HTML>
и не нахожу по этой простой причине ( сервак внезапно прекращает отсыл данных)
программа "зависает" в цикле While, перебор до дисконнекта с сервером дает тот же результат.
понимаю, что где то загвоздка, только вот где....
вот код :

   s := TcpClient1.Receiveln;
   While pos('</HTML>',ansiuppercase(s))=0 do
   begin
      ClientSocket.Sendln(s);
      Application.ProcessMessages;
      s := TcpClient1.Receiveln;
   end;
      ClientSocket.Sendln(#13#10);


Reindeer Moss Eater   (2007-02-22 12:33:00) [7]

Ты знаешь, все что там написано, я прочитал, но проблемы  моей это никак не решило

Что конкретно за проблема?


jiny   (2007-02-22 11:58:00) [8]

>>Тебе уже говорили, что все, что ты хочешь об этом знать и не
>>стесняешься спрашивать здесь описано в RFC. Причем есть переводы этих >>>документов на русский язык.

Ты знаешь, все что там написано, я прочитал, но проблемы  моей это никак не решило

А если не задавать в форуме вопросов, пусть даже, по вашему мнению, тупых, то давайте попросим уважаемых модераторов вообще закрыть его, зачем он нужен, все ж будут по ссылкам в любом случае ходить.
А раз форум есть, то будут и вопросы - любые, тупые, умные, не имеет значения, если тебе в ломы отвечать можешь вообще не отвечать, никто же не принуждает, только просит.


Reindeer Moss Eater   (2007-02-22 11:35:00) [9]

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

Тебе уже говорили, что все, что ты хочешь об этом знать и не стесняешься спрашивать здесь описано в RFC. Причем есть переводы этих документов на русский язык.

Нам цитировать положения этих документов здесь?


jiny   (2007-02-22 11:18:00) [10]

Опять обсуждение превратилось в перепалку и острословие :(


jiny   (2007-02-22 11:16:00) [11]

>>Reindeer Moss Eater ©   (22.02.07 09:44) [35]

Честное слово, чувствую себя Кларисией Старлинг из "Молчания Ягнят", которая анализирует загадки, выдаваемые Ганибалом Лектором

>>SlymRO   (22.02.07 10:26) [36]
>>Зачем тебе это? Стаким скудным набором знаний за эту предметную
>>область даже браться не стоит.

Ну а как иначе изучить, если не практиковаться, а с практикой и теорию читаю, на которую мне более умные братья ссылки дают.

>>Если сможешь ответить на вопрос: "Чем отличается блокирующий режим
>>работы сокета от неблокирующего?", то можно начать "байтики слать"

bmBlocking & bmNonblocking, соответственно синхронная и асинхронная прием и передача данных, а также синх. и асинх. соединение с сервером, т.е.  если ты вызвал какую-нить  из функций приема/передачи, то инструкции, следующие за этим вызовом, будут выполнены лишь после того, как будет выполнен фактический ввод/вывод в том или ином объеме запрошенных к вводу/выводу данных.
Теперь я могу "слать байтики" дальше ?!Я так думаю, что да.

>>>Но парсить протокол высокого уровня, тебе рановато...
Извини, я сам буду решать за что мне браться, и планомерно, пусть не так быстро, как хотелось, буду добиваться этого.

>>чемже отличеются друг от друга buf (буфер) и ln (строка)...
Buf & Ln это соответственно byte & string.

Чем стыдить человека, причем попусту, лучше бы помог разобраться c вопросом. С дельфями я знаком давно, но работал, в основном только с базами данных, но эту тему только осваиваю, и этот форум не единственное место моего обучения, если тебе от этого станет спокойней на душе.


SlymRO   (2007-02-22 10:26:00) [12]

Зачем тебе это? Стаким скудным набором знаний за эту предметную область даже браться не стоит...
Если сможешь ответить на вопрос: "Чем отличается блокирующий режим работы сокета от неблокирующего?", то можно начать "байтики слать"
Но парсить протокол высокого уровня, тебе рановато...
А если возникает вопрос: jiny   (22.02.07 8:51) [34], то нужно все отодвинуть на несколько шагов назад и подумать чемже отличеются друг от друга buf (буфер) и ln (строка)...


Reindeer Moss Eater   (2007-02-22 09:44:00) [13]

длинну контента вытащил, это в байтах или количество строк ?

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

Ты работаешь с веб сервером. Вас двое. Ты - клиент. До чьего дисконнекта надо читать данные?

Может при TcpServer1.OnAccept нужно создавать несколько потоков и в каждом потоке принимать данные от сервера HTTP и сразу же отправлять в браузер клиента ?

Это уж как напишешь. Можно последовательно, можно и в несколько потоков.


jiny   (2007-02-22 08:51:00) [14]

И вообще насколько целесообразно использовать ReceiveLn, может вместо нее ReceiveBuf юзать ?


jiny   (2007-02-22 08:49:00) [15]

Судя по логу обращений от клиента, который ведет мой прокси, при входе c браузера клиента на www.mail.ru данные должны приниматься в несколько потоков. Может при TcpServer1.OnAccept нужно создавать несколько потоков и в каждом потоке принимать данные от сервера HTTP и сразу же отправлять в браузер клиента ?
вот что пишет лог прокси при попытке входа на www.mail.ru , я насчитал 9 команд GET:


*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
GET http://www.mail.ru/HTTP/1.0</>
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-icq, */*
Accept-Language: ru
Cookie: mrcu=48CE45D995667305882834E3C852; p=+ckHAFr/RQAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAA AAAAEGugcA; Mpop=1172031148:6140667f0a60417f19050219091d001b030d004f6a5d5e465e070308061d000f 7118504a50530706071658565c5d1a454c:asik666@mail.ru:
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.mail.ru
Proxy-Connection: Keep-Alive
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
GET http://www.mail.ru/mail/ru/images/logon.gifHTTP/1.0
Accept: */*
Referer: http://www.mail.ru/
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.mail.ru
Cookie: mrcu=48CE45D995667305882834E3C852; p=+ckHAFr/RQAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAA AAAAEGugcA; Mpop=1172031148:6140667f0a60417f19050219091d001b030d004f6a5d5e465e070308061d000f 7118504a50530706071658565c5d1a454c:asik666@mail.ru:
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
GET http://www.mail.ru/1.gifHTTP/1.0
Accept: */*
Referer: http://www.mail.ru/
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.mail.ru
Cookie: mrcu=48CE45D995667305882834E3C852; p=+ckHAFr/RQAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAA AAAAEGugcA; Mpop=1172031148:6140667f0a60417f19050219091d001b030d004f6a5d5e465e070308061d000f 7118504a50530706071658565c5d1a454c:asik666@mail.ru:
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
GET http://www.mail.ru/mail/ru/images/logon.gifHTTP/1.0
Accept: */*
Referer: http://www.mail.ru/
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.mail.ru
Cookie: mrcu=48CE45D995667305882834E3C852; p=+ckHAFr/RQAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAA AAAAEGugcA; Mpop=1172031148:6140667f0a60417f19050219091d001b030d004f6a5d5e465e070308061d000f 7118504a50530706071658565c5d1a454c:asik666@mail.ru:
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
GET http://www.mail.ru/1.gifHTTP/1.0
Accept: */*
Referer: http://www.mail.ru/
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.mail.ru
Cookie: mrcu=48CE45D995667305882834E3C852; p=+ckHAFr/RQAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAA AAAAEGugcA; Mpop=1172031148:6140667f0a60417f19050219091d001b030d004f6a5d5e465e070308061d000f 7118504a50530706071658565c5d1a454c:asik666@mail.ru:
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
GET http://www.mail.ru/mail/ru/images/telephonem.gifHTTP/1.0
Accept: */*
Referer: http://www.mail.ru/
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.mail.ru
Cookie: mrcu=48CE45D995667305882834E3C852; p=+ckHAFr/RQAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAA AAAAEGugcA; Mpop=1172031148:6140667f0a60417f19050219091d001b030d004f6a5d5e465e070308061d000f 7118504a50530706071658565c5d1a454c:asik666@mail.ru:
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
GET http://www.mail.ru/mail/ru/images/log_bms.gifHTTP/1.0
Accept: */*
Referer: http://www.mail.ru/
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.mail.ru
Cookie: mrcu=48CE45D995667305882834E3C852; p=+ckHAFr/RQAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAA AAAAEGugcA; Mpop=1172031148:6140667f0a60417f19050219091d001b030d004f6a5d5e465e070308061d000f 7118504a50530706071658565c5d1a454c:asik666@mail.ru:
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
GET http://r.mail.ru/b1791392.gifHTTP/1.0
Accept: */*
Referer: http://www.mail.ru/
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: r.mail.ru
Cookie: mrcu=48CE45D995667305882834E3C852; p=+ckHAFr/RQAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAA AAAAEGugcA; Mpop=1172031148:6140667f0a60417f19050219091d001b030d004f6a5d5e465e070308061d000f 7118504a50530706071658565c5d1a454c:asik666@mail.ru:
===== End of message =====
*** Connection Accepted ***
Remote Host: ACA80C53.ipt.aol.com (172.168.12.83)
===== Begin message =====
GET http://www.mail.ru/0.gifHTTP/1.0
Accept: */*
Referer: http://www.mail.ru/
Accept-Language: ru
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: www.mail.ru
Cookie: mrcu=48CE45D995667305882834E3C852; p=+ckHAFr/RQAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAA AAAAEGugcA; Mpop=1172031148:6140667f0a60417f19050219091d001b030d004f6a5d5e465e070308061d000f 7118504a50530706071658565c5d1a454c:asik666@mail.ru:
===== End of message =====


jiny   (2007-02-22 08:32:00) [16]

Reindeer Moss Eater ©   (21.02.07 14:58) [31]

длинну контента вытащил, это в байтах или количество строк ?
Reindeer Moss Eater ©   (21.02.07 14:47) [25]
Если её там нет, читать ответ надо до дисконнекта

то чьего дисконекта нужно принимать данные с сервера, до дисконекта с сервером HTTP или с браузером клиента ?
Пробовал и так и так, конект  стоит устойчивый :)

Рисунки все еще не принимаются, пробовал через ReceiveBuf & SendBuf та же ерунда


Reindeer Moss Eater   (2007-02-21 14:58:00) [17]

Server: tns-counter.0.3.1
Date: Wed, 21 Feb 2007 11:50:16 GMT
Content-Type: image/gif
Content-Length: 43
Location: http://www.tns-counter.ru/V13b****mail_ru/ru/CP1251/tmsec=mail_main/
Connection: close
Cache-Control: no-store


jiny   (2007-02-21 14:57:00) [18]

Reindeer Moss Eater ©   (21.02.07 14:53) [28]
прочитал по HTTP, но нифига не получается( в п.29)


jiny   (2007-02-21 14:56:00) [19]

на mail.ru 2-3 гифки загрузились, каким то образов, может стрим читать (ReceiveStream) ?
и дальше не грузит, хотя  а на ya.ru пашет, только вот с рисунками проблема, как можно ее решить, хотя бы подскажите, в каком направлении рыть


jiny   (2007-02-21 14:53:00) [20]

Вот начальный контент сервера

HTTP/1.1 302 Moved Temporarily
Server: tns-counter.0.3.1
Date: Wed, 21 Feb 2007 11:50:16 GMT
Content-Type: image/gif
Content-Length: 43
Location: http://www.tns-counter.ru/V13b****mail_ru/ru/CP1251/tmsec=mail_main/
Connection: close
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID CUR OUR NOR"
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Pragma: no-cache
Set-Cookie: gsid=8DFC030045DC31F845DC3900; path=/


вот что идет после :
GIF89a\x1


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо