![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как подкл. ч-з TCPClient, отправить строку "GET" и пол.ответ ? [D7, WinXP]
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