Показать сообщение отдельно

ну звиздец какойто просто...
  #12  
Старый 28.05.2010, 01:52
RedFern.89
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
С нами: 8582863

Репутация: 69
Smile ну звиздец какойто просто...

Дабы не плодить кучу тем по моим вопросам, задам вопрос тут. Есть 1 функция и одна процедура. Обе взаимосвязанны. Называются Get и Redirect. Думаю человек, знающий протокол HTTP поймет, что за функции. Допустим при выполнении функции GET произошло 2 редиректа. Как сделать так, что бы функция GET закончила свое выполнение, до тех пор, пока все редиректы не закончатся? т.е. вернула страницу конечного редиректа. В моем же случае функция GET возврщает код 1й страницы, а нужно той страницы, на которую произошла переадресация. Получается так, что функция get работает дальше и грузит все страницы, но в том коде, в котором она выполняется она отдала код 1й страницы и все. Привожу коды обеих процедур:

Код:
// ---- Обрабатываем перенаправление ----
procedure THTTPCli.Redirect(const AData, AHost: string);
var
   Location : string;
begin
   Location := AData;
   Location := Copy(Location, Pos('Location:', Location) +10, Length(Location));
   Delete(Location, Pos(#13, Location), Length(Location));

  // Проверка локаций и исправление
   If Location[1] = '/' Then Get(AHost + Location);

   If (Location[1] <> '/') And (Pos('http://', location) = 0) Then
   begin
    Location := '/' + Location;
    Get('http://' + AHost + Location);
   end;

   If Pos('http://', Location) <> 0 then
   begin
    Location := Copy(Location, Length(GetHost(Location)) +8, Length(Location));
    Get(Location);
   end;

end;

// ---- Отправка GET-запроса ---- ;overload
function THTTPCli.Get(const AURL: string): string;
var
  Head   : string;
  Host   : string;
  urlObj : string;
begin
 { Парсим url }
  urlObj := AURL;
  urlObj := Copy(urlObj, Length(GetHost(urlObj)) +8, Length(urlObj));
  Host   := GetHost(AURL);

 // Составляем заголовок без куков
  Head := 'GET ' + urlObj + ' HTTP/1.1' + crlf +
          'User-Agent: Mozilla/4.8 [en](Windows NT 5.0; U)' + crlf +
          'Connection: close' + crlf +
          'Host: ' + Host + crlf + crlf;

 // А если таковые имеются, прибавляем их к заголовку
 If Length(_cookie) <> 0 Then
 begin
   Head := 'GET ' + urlObj + ' HTTP/1.1' + crlf +
           'User-Agent: Mozilla/4.8 [en](Windows NT 5.0; U)' + crlf +
           'Connection: close' + crlf +
           'Cookie: ' + _cookie + crlf +
           'Host: ' + Host + crlf + crlf;
 end;
 // Отсылаем запрос
  SendRequest(Host, 80, Head, Result);

 // Если сервер сказал 302, переходим по сказанной локации
  If Pos('302', Result) <> 0 then
  begin
     Redirect(Result, Host);
  end;
end;
блин как запарился уже. Извините за офтоп и кучу всем давно надоевшим вопросам.

Последний раз редактировалось RedFern.89; 28.05.2010 в 02:32.. Причина: дикий звиздец
 
Ответить с цитированием