Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > HttpGetText


Автор: mrmen1 30.8.2010, 14:49
в чем проблема?

procedure TForm1.Button3Click(Sender: TObject);
begin
HttpGetText('http://l2top.ru', Memo1.Lines);
end;

выводит пустую страницу... остальные сайты нормально отображает.. возможно нужно представляться как браузер? но как ето сделать

Автор: Matematik 30.8.2010, 19:20
Надо правильно обрабатывать ответ сервера.
Конкретно l2top.ru выдает 302  http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2_%D1%81%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D1%8F_HTTP#302
HttpGetText() это делать не умеет.
Тут надо дописывать ручками.
пример - дeлаю запрос HTTPMethod(), проверяю в заголовках ответа поле "location", если оно есть делаю запрос заново с новым URL
Код

function HTTP_GetHeader(AHeaders: TStrings; const AHeaderName:AnsiString):AnsiString;
var j:Integer;
begin
  Result := '';
  for j:=0 to AHeaders.Count-1 do
  begin
    if Pos(AHeaderName, AHeaders[j])=1 then
    begin
      Result := Copy(AHeaders[j], Length(AHeaderName)+1, MaxInt);
      Exit;
    end;
  end;
end;

function HTTP_HeaderLocation(AHeaders: TStrings):AnsiString;
begin
  Result := HTTP_GetHeader(AHeaders, 'Location: ');
end;

function Http_Get(AHTTP: THTTPSend; const URL: string; const Response: TStrings): Boolean;
begin
  Result := AHTTP.HTTPMethod('GET', URL);
  if Result then
    if HTTP_HeaderLocation(AHTTP.Headers)<>'' then
      Result := Http_Get(AHTTP, HTTP_HeaderLocation(AHTTP.Headers), Response)
    else
      Response.LoadFromStream(AHTTP.Document)
end;

function HttpGetText(const URL: string; const Response: TStrings): Boolean;
var
  HTTP: THTTPSend;
begin
  HTTP := THTTPSend.Create;
  try
    result := Http_Get(HTTP, URL, Response)
  finally
    HTTP.Free;
  end;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)