• 0
R.is

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

Вопросы

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

http/1.1 404 not found

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 ответа на этот вопрос

  • 0

но он существует с браузера все отлично заходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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, но выдаёт контент, кто-то наверно накосячил, либо я что-то упустил...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

а где он вам выдает контент? в браузере или в дельфи?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

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

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

Поделиться сообщением


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

  • Похожий контент

    • От Mars M
      Есть такой вот код для работы с гугл переводчиком:
      procedure TfrmMain.GTranslate; var Data: TStringList; S: String; begin IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru-RU) Gecko/20100625 Firefox/3.6.6'; Data := TStringList.Create; try Data.Text := ('client=x'#13#10 + 'text=' + Edit1.Text + #13#10 + 'hl=en'#13#10 + 'sl=en'#13#10 + 'tl=ru'); try S := (IdHTTP1.Post('http://translate.google.ru/translate_a/t', Data)); except on E: exception do ShowMessage(E.ClassName + ' error raised, with message : ' + E.Message); end; finally Data.Free; end; end; Работает без проблем.
      Переделал его для NetHttpClient, практически один в один и вместо перевода получаю html страницу с гугл капчей.
      Типа такой как получаю если заходить через браузер http://translate.google.ru/translate_a/t?client=x&text=Hello&hl=en&sl=en&tl=ru
      Так в чем между ними разница что получаю разный результат?
      PS: Просто я в проекте и так использую NetHttpClient, хотелось бы на нем и сделать а не плодить кучу однотипных компонентов.
    • От Sashar333
      Здравствуйте! Вопрос такой:
      Есть процедура:
      Если переменные inn,capcha и capchaToken указаны правильно то Idhttp работает как надо, если inn или capcha не верны то прим Idhttp.post программа выдает ошибку:

      а хочется получить данные как в анализаторе:

      Как можно это сделать? 
    • От Rustam Bikeev
      Доброго времени суток уважаемые форумчане, назрел вопрос по компоненту ThttpClient. Я сам слеп в области Http что такое Post, Get  и прочие аббревиатуры для меня страшные и дикие звери которых никогда не видел. Потому и приходится спрашивать у вас. Как отправить на веб сервер запрос для получения текстового файла или картинки. Куда и как принять этот файл. Я нечерта не пойму если вы напишите сделай это сделай то, прошу вас опишите как пользоваться этими 3 функциями 
      THTTPClient.GetRequest
      THTTPClient.Post
      THTTPClient.Get
       
    • От Кирилл
      Добрый день!
      Возникла необходимость из программы на Android отправлять запросы на web сервер и получать ответ.
      Пробую использовать TidHTTP:
      - кинул на форму компонент TidHTTP;
      - вызываю:  
      procedure TForm1.btSendClick(Sender: TObject); var list: TStringList; s: string; begin list := TStringList.Create; try list.Add('1'); try s := IdHTTP1.Post('http://127.0.0.1', list); ShowMessage(s); except on E: Exception do ShowMessage('Error: ' + E.Message); end; finally FreeAndNil(list); end; end; - в результате программа закрывается. Без всяких сообщений.
      Запускал на смартфоне Samsung Galaxy A3 (2016) Android 6.0.1.
      В чем может быть проблема?
       
       
       
       
       
       
    • От giveaway
      При написании кода под Windows я обычно использую WinNT, чтобы определить, выходит ли пользователь в Интернет через файрвол, а также для проверки сертификата сайта, когда клиент подключается к нему. Чем можно заменить WinNT под Firemonkey, чтобы выполнить эти задачи – проверку наличия файрвола и проверку сертификата сайта? Спасибо.
    • От M1shQa
      И снова я к Вам за советом, господа. Задачка: пользователь кидает телефон в карман и в фоновом режиме программа сама проверяет каждые секунд 15 наличие новой строки в стринглисте, который цепляется с файла и пытается отправить http запрос. Как мне до этого подсказали копать надо в сторону сервисов. Что же, начал: создал сервис, прицепил к приложению, кинул на него таймер и http от indy, написал кучу кода. Как итог - сервис виден в процессах но таймер не срабатывает и ничего не происходит (запускаю приложение, что бы запустить сервис, выхожу из него и жду проверяя данные на сервере). Но происходит совсем ничего. Туда ли я вообще полез или это нужно реализовывать как то иначе? Стоит local сервис, может проблема в этом? Ниже в темах писали что таймер не работает или еще что, при компиляции ничего не ругается, хотя условий там море и т.д. Все данные которые мне нужно отправить цепляются из текстовых файлов и далее в TStringList..  Понятное дело что такой сервис будет жрать батарейку и кучу трафика, но они так и так тратятся пользователем в "ручном" режиме
    • От magicxor
      При простом GET-запросе на эти URL:
      https://accounts.google.com/AddSession?hl=ru&continue=https://www.google.com/%3Fgws_rd%3Dssl
      https://accounts.google.com/Logout?hl=ru&continue=https://www.google.com/%3Fgws_rd%3Dssl&timeStmp=1463418874
      Возникает исключение:
      В инди такой проблемы нет, она отдаёт контент HTML страницы, как и положено.
      Потестить можно через C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\RTL\HttpAsyncDownload
      Это очередной баг?
      (использую Delphi 10.1 Berlin)
    • От AndreyS
      День добрый! Пишу приложение, которое периодически загружает информацию с сайта. Способ простейший - 
      SiteResult := IdHTTP.Get('http://example.com/'); На компе стоит dr. web. Обычно, когда какое-либо приложение пытается получить данные из сети, вываливается стандартное окошко брандмауэра, мол, так и так, данное приложение пытается получить доступ к сети, разрешить, заблокировать или создать для него правило. В моем же случае такого не происходит. Просто при выполнении  указанной строки кода появляется сообщение об ошибке сокета #10013 Access Denied в независимости от указанного адреса (включая localhost). При попытке отправки POST-запроса - та же история. При отключении брандмауэра dr. web все запросы отрабатываются без осложнений)). В чем может быть причина? Может у TidHTTP должны быть определенным способом заполнены какие-то свойства?
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу