ДЕЛФИ + idHTTP + POST()

делфи хе7, вин 7 х64

как правильно сделать idHTTP.POST() ?

я имею в виду, если я попробую просто

    HTTP.post(URL, params);
    if HTTP.ResponseCode=302 then
    begin

я просто застрял здесь и не могу восстановить текст и т. д.

этот код работает

try
    HTTP.post(URL, params);
  except
    if HTTP.ResponseCode=302 then
    begin

но мне не нравится это "попробовать, кроме"..

как я могу правильно сделать этот POST без попытки, кроме?


person AHTOLLlKA    schedule 21.04.2015    source источник


Ответы (1)


302 — это перенаправление HTTP на новый URL. Если свойство TIdHTTP.HandleRedirects имеет значение False (по умолчанию), TIdHTTP обрабатывает его как любую другую ошибку, по умолчанию вызывая исключение EIdHTTPProtocolException. Итак, либо установите для TIdHTTP.HandleRedirects значение True и разрешите TIdHTTP перенаправлять автоматически (вы можете использовать событие TIdHTTP.OnRedirect для обнаружения отдельных перенаправлений), либо отключите исключение, если хотите самостоятельно обрабатывать 302.

  1. Если вы используете версию Indy 10.6 за последние 2 года, вы можете включить флаг hoNoProtocolErrorException в свойстве TIdHTTP.HTTPOptions, например:

    HTTP.HTTPOptions := HTTP.HTTPOptions + [hoNoProtocolErrorException];
    HTTP.Post(URL, params);
    if HTTP.ResponseCode=302 then
    
  2. если вы используете более старую версию, вам придется вызывать TIdHTTP.DoRequest() напрямую вместо TIdHTTP.Post(), чтобы вы могли указать 302 в параметре AIgnoreReplies. Подвох в том, что вы должны передать данные params как TStream, например:

    type
      TIdHTTPAccess = class(TIdHTTP)
      end;
    
    //HTTP.Post(URL, params);
    ParamStream := TMemoryStream.Create;
    try
      WriteStringToStream(ParamStream, TIdHTTPAccess(HTTP).SetRequestParams(params));
      ParamStream.Position := 0;
      TIdHTTPAccess(HTTP).DoRequest('POST', URL, ParamStream, nil, [302]);
    finally
      ParamStream.Free;
    end;
    if HTTP.ResponseCode=302 then
    
person Remy Lebeau    schedule 21.04.2015