Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 TIdHTTP и обработка ошибок 404 403 и проч  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 339
добрый день
проблема такая: использую TIdHTTP для работы с сервисом
и все бы ничего, но надо обрабатывать ошибки
а информацию об ошибках сервис присылает не в заголовках, а в Content, в Json-данных
при этом в заголовке - просто ошибка 403, без расшифровки
но при возникновении ошибки ContentStream не заполняется ничем

вот так это выглядит:
  
  S := TStringStream.Create(Json);
  HTTP:=TIdHTTP.Create(nil);
  SSL:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  HTTP.IOHandler:=SSL;

//..........................................
//..........................................

    try
        HTTP.Get('https://test.com/v1/checkit', S);
        i:=HTTP.Response.ContentStream.Size; //  если все отработало норм, то здесь поток имеет содержимое, Size>0 
    except
      on E: Exception do begin
        i:=HTTP.Response.ContentStream.Size; //  если была ошибка, то Size=0
        MessageDlg('Ошибка: ' + e.Message, mtError, [mbOK], 0);
      end;
    end;

  FreeAndNil(S);
  HTTP.Destroy;
  SSL.Destroy;


что можно сделать тут? почему TIdHTTP не закачивает тело ответа?
1 дек 17, 05:33    [20997199]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 720
хочешь сказать IdHTTP1.ResponseText пусто ?
1 дек 17, 09:42    [20997384]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 339
Ghost Writer,

не пусто
там вот это:
"HTTP/1.1 403"

и всё.
1 дек 17, 15:39    [20998777]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 339
Ghost Writer,

а когда ситуация штатная, то там
"HTTP/1.1 200"

а контент - в ContentStream
1 дек 17, 15:43    [20998790]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2091
genok,

а проблема в чём? вроде бы два чистых состояния. что не так?
1 дек 17, 16:36    [20999021]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2091
автор
и всё.


что ты там ожидал? сервер тебе вернул код ошибки. что ты еще от него хочешь? :)
1 дек 17, 16:38    [20999027]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 720
genok,

это мерзкая фишка индейки.
если точно знаешь, что даже в случае 403 и т.п. сервер должен вернуть json и он тебе так необходим, то лучше искать замену инди.
например, Synapse THTTPSend. Он не генерит исключений и загружает контент в любом случае.
1 дек 17, 16:56    [20999096]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 720
а если контент нужен ради стандартных ответов сервера типа 403 Forbidden , 404 Not Found ...
то кодов достаточно. https://ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP
1 дек 17, 16:59    [20999108]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
fd00ch
Member

Откуда: Нижний Новгород
Сообщений: 5864
genok, исходники инди покури. емнип, там то ли опция была, которая подгружает ответ сервера при ошибках, то ли простое исправление исходников.
1 дек 17, 18:13    [20999302]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 339
Ghost Writer
если точно знаешь, что даже в случае 403 и т.п. сервер должен вернуть json


именно так, должен
там на одну ошибку 404, к примеру, штук 7 её вариантов
а мне журналирование нужно сделать толковое
2 дек 17, 00:50    [21000008]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 339
fd00ch
genok, исходники инди покури. емнип, там то ли опция была, которая подгружает ответ сервера при ошибках, то ли простое исправление исходников.


собственно, за этим и обратился к вашей помощи, сам не могу найти
2 дек 17, 01:41    [21000067]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 339
нашел
в случае ошибки содержимое ответа сервиса попадает не в Response, а в EIdHTTPProtocolException.ErrorMessage
Json найден, всем спасибо!

    except
      on E:EIdHTTPProtocolException do
        Result[0]:=E.ErrorMessage;
    end;
2 дек 17, 01:59    [21000078]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 720
genok,

вот наверно твой случай.
https://stackoverflow.com/questions/15013068/indy-and-rest-can-i-prevent-exceptions
если верси Indy выше 9-й, то должна быть опция hoNoProtocolErrorException.
2 дек 17, 02:00    [21000079]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 339
Ghost Writer
genok,

вот наверно твой случай.
https://stackoverflow.com/questions/15013068/indy-and-rest-can-i-prevent-exceptions
если верси Indy выше 9-й, то должна быть опция hoNoProtocolErrorException.


посмотрел, у меня Indy 10.5.8.0 но такой опции нет
наверное, можно попробовать обновить на свежее и посмотреть что выйдет (у меня ХЕ2)
но не рискну, ибо на эту библиотеку завязана куча всего другого, что уже написано и РАБОТАЕТ
а то, что работает, как известно, лучше не трогать)))

нашел потерянный Json, и ладно. Нах эксперименты
2 дек 17, 02:17    [21000087]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 720
genok,
да он в 10.6
https://stackoverflow.com/questions/29777812/delphi-idhttp-post

genok
нашел потерянный Json
а это точно он ? Какой умный инди стал, уже жсон парсит
2 дек 17, 02:27    [21000092]     Ответить | Цитировать Сообщить модератору
 Re: TIdHTTP и обработка ошибок 404 403 и проч  [new]
genok
Member

Откуда: med-registratura.net
Сообщений: 339
Ghost Writer,

ну это не распарсенный Json, конечно
но инди есть куда расти))))
2 дек 17, 02:42    [21000097]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить