Перейти к содержанию
Fire Monkey от А до Я
  • 0

[TidHTTP] Почему IdHttp1.Get может выдавать 404 ошибку, файл не найден?


R.is

Вопрос

Опубликовано

Подскажите пожалуйста как избежать данную проблему, пытаюсь загрузить исходный код страницы IdHTTP1.Get('сайт') а Indy говорит что ее не существует 

http/1.1 404 not found

 

Рекомендуемые сообщения

  • 0
Опубликовано (изменено)

А User-Agent поменяли?

Давайте больше подробностей... мы не экстрасенсы(заезженное выражение, но что поделаешь..)

Понимаю))

 

User-Agent     Mozilla/3.0 (compatible; Indy Library)

HandleRedirects := True

 

Memo1.Text :=IdHttp1.Get('http://airnav.tj/ru/online/utdd');

Изменено пользователем R.is
  • 0
  • Модераторы
Опубликовано

В браузере. Сервер возвращает ответ 404 Not Found, но при этом отдаёт контент. Пока не додумался как обойти этот косяк, впервые с таким сталкиваюсь....

  • 0
Опубликовано

В браузере. Сервер возвращает ответ 404 Not Found, но при этом отдаёт контент. Пока не додумался как обойти этот косяк, впервые с таким сталкиваюсь....

Странно у меня в браузере все без ошибок а в дельфи 

http/1.1 404 not found
  • 0
  • Модераторы
Опубликовано

Как вы смотрите ошибку в браузере? В каждом браузере есть утилиты для отладки/разработки сайтов, вот через неё я и смотрел ответ сервера... Какой браузер используете? Если в нём ответ 200, то пропишите его в юзер-агенте и проверьте.

 

Проверил в последнем Фаерфоксе и Опере 12.17, везде 404 Not Found, сервер неправильно настроили... Это уже и не важно, сейчас надо понять как заставить Indy грузить контент несмотря на ошибку.

  • 0
Опубликовано (изменено)

Может стоит прописать полный URL http://www.airnav.tj/ru/online/utdd ?
У тебя сейчас www. пропущен..
В браузере похоже автоматическая переадресация идёт в случае ненахождения по краткому имени, а в Indy такой переадресации или нет, или она не задействована..

Изменено пользователем Nik
  • 0
Опубликовано

Может стоит прописать полный URL http://www.airnav.tj/ru/online/utdd ?

У тебя сейчас www. пропущен..

В браузере похоже автоматическая переадресация идёт в случае ненахождения по краткому имени, а в Indy такой переадресации или нет, или она не задействована..

Это я первым делом сделал но результата нет(

  • 0
  • Модераторы
Опубликовано

Может стоит прописать полный URL http://www.airnav.tj/ru/online/utdd ?

У тебя сейчас www. пропущен..

В браузере похоже автоматическая переадресация идёт в случае ненахождения по краткому имени, а в Indy такой переадресации или нет, или она не задействована..

Что за странное предположение...

Indy поддерживает редиректы в полной мере. А переадресация с www на без www или наоборот - это и есть обычный 301 редирект.

 

Я объяснил в чём проблема. Сервер неправильно отдаёт состояние, вместо кода 200 идёт 404, Indy похоже просто не рассчитан на такую ситуацию, максимум, чего мне удалось добиться, это убрать выскакивающую табличку с 404 ошибкой, но код страницы всё равно не подгружается.

 

Возможно, у кого то будут ещё идеи...

  • 0
Опубликовано

Удалите из User Agent данные о Indy.

Многие сайты блочат и глючат видя такой User Agent, ибо очень много ботов всяко-разных пишется с их использованием.

Напишите, например:

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36

  • 0
Опубликовано

Удалите из User Agent данные о Indy.

Многие сайты блочат и глючат видя такой User Agent, ибо очень много ботов всяко-разных пишется с их использованием.

Напишите, например:

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36

Нет это не поможет, дело не в Indy а в самом сайте как уже сказал Андрей 

  • 0
  • Модераторы
Опубликовано
function idHttpGet(const aURL: string): string;
// uses  System.Net.HttpClient, System.Net.HttpClientComponent, System.Net.URLClient;
var
  Resp: TStringStream;
  Return: IHTTPResponse;
begin
  Result := '';
  with TNetHTTPClient.Create(nil) do
  begin
    Resp := TStringStream.Create('', TEncoding.ANSI);
    Return := Get( { TURI.URLEncode } (aURL), Resp);
    Result := Resp.DataString;
    Resp.Free;
    Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(idHttpGet('http://airnav.tj/ru/online/utdd'));
end;

Держи

  • 0
  • Модераторы
Опубликовано

О_о, я и не знал про такой компонент. Видно новый... ZuBy, плюс тебе однозначно :)

P.s.ушел перечитывать нововведения в XE8 и Seattle

я временно на него перешел, тестю.

пока полет нормальный. и видимо чуток стабильней :D

  • 0
Опубликовано

На презентации Seattle рекомендовали использовать именно его, а не Indy.

Вот только не знаю - работает ли он через https.

А так - насколько я знаю, Indy не заставить отдавать контент в случае кода ответа, отличного от 200.

Если сервер возвращает 400 - 5хх ошибку, то происходит выход из метода Get/Post через исключение(!), что мне изначально не понравилось. Контент при этом недоступен, вполне возможно (я не стал разбираться) исключение вызывается сразу после получения заголовка, до приема тела ответа.

  • 0
Опубликовано
function idHttpGet(const aURL: string): string;
// uses  System.Net.HttpClient, System.Net.HttpClientComponent, System.Net.URLClient;
var
  Resp: TStringStream;
  Return: IHTTPResponse;
begin
  Result := '';
  with TNetHTTPClient.Create(nil) do
  begin
    Resp := TStringStream.Create('', TEncoding.ANSI);
    Return := Get( { TURI.URLEncode } (aURL), Resp);
    Result := Resp.DataString;
    Resp.Free;
    Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(idHttpGet('http://airnav.tj/ru/online/utdd'));
end;

Держи

 

Большое вам спасибо все отлично работает))

  • 0
Опубликовано (изменено)

И снова прошу помощи у вас 

делаю парсинг этого сайта и собираю ссылки на нужные картинки в Listbox, пользуюсь вот этим хелпером http://fire-monkey.ru/topic/2185-dinamicheskaia-podgruzka-kartinok-v-listview/ чтобы загрузить картинки в ListView 

картинки не загружаются т.к сервер выдает 404 

как быть?

Прикрепляю исходник https://drive.google.com/file/d/0B10br05z6dsAaHhya1hrR1JKZE0/view?usp=sharing

Изменено пользователем R.is
  • 0
  • Модераторы
Опубликовано (изменено)

а теперь если вспомнить почему у вас не грузился вообще контент этой страницы, то вопрос отпадёт

post-59-0-76266500-1454651564_thumb.png

Изменено пользователем ZuBy
  • 0
Опубликовано

ну... контент не загружался потому что сервер выдавал 404 в indy ))) и я не смог разобраться с этим

а как вы это сделали? поделитесь? 

  • 0
Опубликовано

Вы снова ответили сами, убрать инди нужно. Из хелпера теперь...

даа...... нужно было всего то в 3-х местах заменить IdHttp на TNetHTTPClient а я два дня уже как не мог додуматься 

еще раз вам спасибо с низким поклоном)

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...