Форум: "Сети";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
ВнизЗамена данных отправляемых при коннекте к серверу (тип браузера, сисетмы и т.д.) Найти похожие ветки
← →
demonyca (2002-02-03 03:39) [0]Как можно учуществить замену данных отправляемых при коннекте к серверу (тип браузера, системы, языка ОС и т.д.)
← →
demonyca (2002-02-03 04:13) [1]я понимаю, что это возможно сделать с помощью сокетов, но как прикруть это к тому же TWebBrowser?
← →
Ghost. (2002-02-03 14:35) [2]Как прикруить не знаю, но цель должна оправдываь седства, можешь сделать свой прокси пехваывать запрос и переделываь его
← →
demonyca (2002-02-03 16:12) [3]А где нибудь можно посмотреть хоть примерно как это делать?
← →
Ghost. (2002-02-03 16:34) [4]Вот вартиант обработки того, что прислал бртаузер
//Получение данных от броузера и отправка их на HTTP-сервер
procedure TClientThread.LocalSocketDataAvailable(Sender:TObject;Error:Word);
var Cmd,LeftPart,RightPart:string;
i:Integer;
begin
try
FCount:=FLocalSocket.Receive(@FBuffer, SizeOf(FBuffer));//Получение от броузера
MainForm.Memo.Lines.Add("Addr "+FLocalSocket.PeerAddr);
MainForm.Memo.Lines.Add("Proto "+FLocalSocket.GetXPort);
i:=0;
While i<>10 do
begin
inc(i);
beep;
end;
//FLocalSocket.OnDataSent:=LocalSocketDataSent;//Эта процедура будет вызвана
//FLocalSocket.SendStr("<Body> Error!<BR>Вы не подключены к Internet</body>");
//Release;
//Exit;
except
end;
IF FCount<=0 then EXIT;//Ничего не принято от броузера, защита
//Броузер отдал запрос и ждет ответ (или выпадет по таймауту)
//С этого момента в FBuffer находится полный запрос броузера.
//Можно анализировать, изменять...
//В данном случае выделяем из запроса URL, HOST, команду,
//а также пишем на экран и в LOG
//Перенос буфера в строку
SetLength(FBufStr,FCount);MOVE(FBuffer,FBufStr[1],FCount);
//Выделение URL
FURL:=COPY(FBufStr,POS(" ",FBufStr)+1,LENGTH(FBufStr));
FURL:=COPY(FURL,1,POS(" ",FURL)-1);
//выделене имени хоста
FHost:=COPY(FURL,8,LENGTH(FURL));
FHost:=COPY(FHost,1,POS("/",FHost)-1);
//выделение запроса (GET,HEAD,POST,...)
Cmd:=COPY(FBufStr,1,POS(" ",FBufStr));
FBufStr:=COPY(FBufStr,LENGTH(Cmd),LENGTH(FBufStr));
FBufStr:=COPY(FBufStr,LENGTH("http://")+2,Length(FBufStr));
FBufStr:=COPY(FBufStr,POS("/",FBufStr)+1,LENGTH(FBufStr));
FBufStr:=Cmd+"/"+FBufStr;
FListMessage:=FUrl;
SYNCHRONIZE(UpdateList);//Обновление видимого списка запросов
FMemo3Msg:="---"+TimeToStr(NOW)+" Запрос программы "+IntToStr(FThreadUniqueID)+"----------"#13#10+FBufStr;
SYNCHRONIZE(UpdateMemo3);//Добавление в видимый список запросов/ответов
FRemoteSocket.OnDataAvailable := RemoteWSocketDataAvailable;//Укзание на процедуру приема данных от HTTP-сервера
FRemoteSocket.MultiThreaded := TRUE;
FRemoteSocket.proto:="tcp";
//Создать запрос на основе @Buffer и SizeOf(Buffer)
try
FRemoteSocket.Addr:=FHost;
FRemoteSocket.Port:="80";
except
RELEASE;//Сокет не создан, это внутренняя ошибка клиента
end;
FRemoteSocket.OnSessionConnected:=RemoteSocketConnect;//Указание на процедуры
FRemoteSocket.OnSessionClosed := RemoteSocketSessionClosed;//при CONNECT и при CLOSESESSION
//Имеем данные к отправке на HTTP сервер (находятся в FBuffer)
IF (NOT (FRemoteSocket.State=wsConnected))
then FRemoteSocket.Connect
else FRemoteSocket.Send(@FBuffer,FCount);
end;
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.018 c