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

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


R.is

Вопрос

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

  • 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

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

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

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

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