2015-04-21 2 views
0

Дельфи xe7, выиграть 7 x64DELPHI + idHTTP + POST()

как правильно делают 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 без попытки, кроме?

ответ

2

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 
    
+0

Инди 10.6.1, и первый вариант работы для меня! Спасибо тебе! – AHTOLLlKA

Смежные вопросы