Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите изменить ответ сервера! ПРОКСИ-Не получается изменить ответ! 
:(
    Опции темы
Pararam
Дата 13.10.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Добрый день!
Не получается изменить данные полученные от сервера!

Получаю от сервера полный ответ и он записывается в TMemoryStream;

Код

HTTP/1.1 200 OK
Date: Tue, 13 Oct 2009 14:05:08 GMT
Server: Apache/2
X-Powered-By: PHP/5.2.10
Vary: Accept-Encoding,User-Agent
Transfer-Encoding: chunked
Content-Type: text/html

281c  //Эти цыфры разные всегда (зависит от сервера!)
Далее код страницы


Процедура обработки!
Страница обрабатывается но после того как я её записываю обратно в мемори стреам браузер выдаёт ошибку что страница не найдена либо высвечивает весь код с ошибками и вместе с ответом Transfer-Encoding Content-Type: text/html и так далее!
Может быть я неправельно читаю память TMemoryStream и изменяю её!?
Подскажите что можно сделать?

Код

procedure THTTPProxyThread.ClientExecute;
var
  msg: TMsg;
  Event: THandle;
  WaitTime: DWord;
  CurData: TMemoryStream;
  //Мои добовления!!!
  SS:TStringStream;
  S:string;
  SL:TStringList;
begin
  SS:=TStringStream.Create(S);
  SL:=TStringList.Create;

  FTransport := CreateServerTransport;
  try
    Event := FTransport.GetWaitEvent;
    PeekMessage(msg, 0, WM_USER, WM_USER, PM_NOREMOVE);
    if FTimeout = 0
    then WaitTime := INFINITE
    else WaitTime := 60000;
    //
    while not Terminated and FTransport.GetConnected do
    try
      case MsgWaitForMultipleObjects(1, Event, False, WaitTime, QS_ALLEVENTS) of
        WAIT_OBJECT_0: begin
          WSAResetEvent(Event);
          CurData := FTransport.Receive(False, 0);
          Answer(CurData);
          CurData.Position:=0;
          SS.Position:=0;

          //Чтение данных!!!
          SS.CopyFrom(CurData, CurData.Size);
          SL.Text:=SS.DataString;

//Вот сдесь меняю данные!!! Мне надо к страничке добовлять в начале текст что клиент работает через прокси сервер!
if (Pos('Content-Type: text/html',SL.Text)<>0) and (Pos('HTTP/1.1 200 OK',SL.Text)<>0) and (Pos('Location: http://',SL.Text)=0) then
BEGIN

           SL.Text:='<B><FONT SIZE="7" COLOR="RED">ПРОКСИ СЕРВЕР!!!!</font></B>'+Copy(SL.Text,Pos('<',SL.Text),length(SL.Text));
           SS.Position:=0;
           SS.WriteString(SL.Text);
           CurData.Position:=0;
           SS.Position:=0;
           CurData.CopyFrom(SS,Length(SL.Text));
END;

          FTransport.Send(CurData);
          FTransport.SetConnected(false);
        end;
        WAIT_OBJECT_0 + 1:
          while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do DispatchMessage(msg);
      end;
    except
      FTransport.SetConnected(False);
    end;
  finally
    FTransport.Free;
    FTransport:=nil;
   SS.Free;
   SL.Free;
  end;
end;



Заранее благодарен!

Это сообщение отредактировал(а) Pararam - 13.10.2009, 20:01
PM MAIL   Вверх
kami
Дата 14.10.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



1. Перед
Цитата(Pararam @  13.10.2009,  19:53 Найти цитируемый пост)
FTransport.Send(CurData);

сделать
CurData.Seek(0, soBeginning);

2. 
Цитата(Pararam @  13.10.2009,  19:53 Найти цитируемый пост)
FTransport.Send(CurData);
FTransport.SetConnected(false);

Если это Indy, то может и правильно, но в другом случае я бы не дал гарантии, что данные, отправленные в буфер сокета ушли корреспонденту после выхода из send. И разве не клиент должен быть инициатором разрыва соединения?
PM MAIL WWW   Вверх
Pararam
Дата 16.10.2009, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



kami

В данном случа сам прокси должен разорвать соединени.... если этого не сделать то следуюший запрос от клиента просто не будет обработан!
и в браузере будет вечная загрузка.......... страницы..... отоброчится только часть!
PM MAIL   Вверх
kami
Дата 16.10.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(Pararam @  16.10.2009,  11:42 Найти цитируемый пост)
если этого не сделать то следуюший запрос от клиента просто не будет обработан!

А каждый запрос от клиента совсем не обязательно (afair) должен идти в отдельном соединении. Ничто не мешает клиенту после приема заголовка и данных в количестве content-length отправить новый запрос в ТО ЖЕ соединение. И это нужно учитывать.

P.S. Пункт 1 остался без внимания?
PM MAIL WWW   Вверх
Pararam
Дата 16.10.2009, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



kami

Я попробовал как вы написали......
Страница приходит изменённой но и в конце добовляется так называемый мусор..получаемый от сервера

Тоесть получается следующее....
Моя строка добовляется... но с сервера во всех страницах приходит после нуля ещё какой то ответ - 
Вот он то и высвечивается внизу страницы.....
Если я его фильтрую... тесть после нуля удоляю всё то страница вобще не отоброжается! Непонятно нечего!
В прикреплённом файле видно какой приходит ответ в браузер!
И вот этот бэд реквест высвечивается.....

Код

HTTP/1.1 200 OK
Date: Tue, 13 Oct 2009 14:05:08 GMT
Server: Apache/2
X-Powered-By: PHP/5.2.10
Vary: Accept-Encoding,User-Agent
Transfer-Encoding: chunked
Content-Type: text/html

281c  
<B><FONT SIZE="7" COLOR="RED">ПРОКСИ СЕРВЕР!!!!</font></B><html>Заголовок!!!!<html>
<a href='%%%%'>23423424</a>
<a href='%%%%1'>2</a>

и так далее до нуля!...

0
HTTP/1.0 400 Bad Request
Content-Type: text/html; charset=UTF-8
Content-Length: 1350
Date: Fri, 16 Oct 2009 08:50:01 GMT
Server: GFE/2.0
X-XSS-Protection: 0



<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>400 Bad Request</title>
...


Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  data812_.txt 33,52 Kb
PM MAIL   Вверх
kami
Дата 17.10.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(Pararam @  16.10.2009,  23:01 Найти цитируемый пост)
 но с сервера во всех страницах приходит после нуля ещё какой то ответ

Цитата(kami @  16.10.2009,  19:11 Найти цитируемый пост)
Ничто не мешает клиенту после приема заголовка и данных ... отправить новый запрос в ТО ЖЕ соединение

Сделай лог не ответов от сервера, а запросов браузера, тогда увидишь, что за "лишний" ответ приходит. (и давай на "ты").
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0779 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.