[Delphi] Редирект

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Stis-mag, 17 Jan 2011.

  1. Stis-mag

    Stis-mag New Member

    Joined:
    22 Nov 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Как сделать что-бы idHttp принимал редирект, но не переходил по нему?
    И еще. Как убрать ошибку, когда в запросе есть редирект? Использую Try .. Except но ошибка все равно появляется, хотя когда открываешь ехе вне делфи то все работает.
     
    #1 Stis-mag, 17 Jan 2011
    Last edited by a moderator: 18 Jan 2011
  2. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    272
    Likes Received:
    276
    Reputations:
    2
    idhttp.HandleRedirects:=false; - переходить по редиректам не будет.

    редирект инди воспринимает как исключительную ситуацию, поэтому компилятор тебе её и выводит как ошибку. не обращай внимания.
     
  3. Stis-mag

    Stis-mag New Member

    Joined:
    22 Nov 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Мне надо url редиректа, а если будет idhttp.HandleRedirects:=false; то у меня не будет адреса этого редиректа.

    А как тогда поступать? Сохранять и отдельно запускать ехе что-ли?
     
  4. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    272
    Likes Received:
    276
    Reputations:
    2
    как это небудет? idhttp.Response.Location - урл редиректа.
     
  5. HakaR

    HakaR Active Member

    Joined:
    23 Jul 2009
    Messages:
    301
    Likes Received:
    200
    Reputations:
    3
    Code:
    var
      HTTP: TIdHTTP;
    begin
      HTTP := TIdHTTP.Create(nil);
      HTTP.HandleRedirects := False;
      try
        try
          HTTP.Get('http://ya.ru/xynta');
        except
          ShowMessage(HTTP.Response.Location);
        end;
      finally
        HTTP.Free;
      end;
    end;
    Upd: опоздал :mad:
     
    #5 HakaR, 17 Jan 2011
    Last edited: 17 Jan 2011
  6. Stis-mag

    Stis-mag New Member

    Joined:
    22 Nov 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Я использовал idhttp1.Request.url
    Сейчас попробую idhttp.Response.Location
     
  7. Stis-mag

    Stis-mag New Member

    Joined:
    22 Nov 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Спасибо.
    И еще, надо запускать exe отдельно от дельфи? И ошибку из-за редиректа не убрать?
     
  8. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    272
    Likes Received:
    276
    Reputations:
    2
    жми "ок" и F9. компилятор её пропустит.
     
  9. Stis-mag

    Stis-mag New Member

    Joined:
    22 Nov 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Спасибо большое. Все проблемы решил :)
     
  10. Stis-mag

    Stis-mag New Member

    Joined:
    22 Nov 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    А можно сделать условие вида: Если есть редирект в ссылке, то делаем это, иначе другое это?
     
  11. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    272
    Likes Received:
    276
    Reputations:
    2
    можно так:



    или так

    мне больше первый способ нравится :)
     
  12. Stis-mag

    Stis-mag New Member

    Joined:
    22 Nov 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    А в http.response.location может храниться только адрес редиректа?
     
  13. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    272
    Likes Received:
    276
    Reputations:
    2
    да, если редирект есть - он там будет. если нету - то там небудет нечего.
     
  14. HakaR

    HakaR Active Member

    Joined:
    23 Jul 2009
    Messages:
    301
    Likes Received:
    200
    Reputations:
    3
    Вброшу ещё своих 5 копеек.
    Code:
    var
      HTTP: TIdHTTP;
    begin
      HTTP := TIdHTTP.Create(nil);
      HTTP.HandleRedirects := False;
      try
        HTTP.Get('http://ya.ru/xynta');
      finally
        if (Length(HTTP.Response.Location) > 0) and (HTTP.ResponseCode = 302) then
          ShowMessage('Redirect: ' + HTTP.Response.Location)
        else
          ShowMessage('No redirect');
        HTTP.Free;
      end;
    end;
     
  15. Stis-mag

    Stis-mag New Member

    Joined:
    22 Nov 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Спасибо!!! Надеюсь больше вас не буду мучить глупыми вопросами :)
     
  16. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Подскажите при проверке редиректа вылетает ошибка. Как ее убрать. Ошибка сообщает о том что на сайте стоит редирект. А Именно HTTP/1.1 302 Found.
    Хотелось бы чтобы она не выводилась.
     
  17. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Вопрос поднимался уже стопицот раз. и уже даже в этой теме был тебе ответ.
    ну а если уж так сильно надоедает, то запускай программу не из Delphi или сделай следующее: Tools-->Debugger Options...-->Сними галочку напротив Integrated Debugging
     
  18. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Дело в том что эта ошибка выходит и когда запускаю и не из под Delphi... Напрямую запуск с ехе и тоже самое. Хотелось бы убрать ее.
    http://clip2net.com/s/TAWk
     
  19. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    используй конструкцию try-except ;)
    http://www.delphisources.ru/pages/faq/faq_delphi_basics/Try.php.html
     
  20. Rastamanka

    Rastamanka Elder - Старейшина

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Пожете подсказать как тут сделать чтобы это не выводилось больше?
    Code:
    
    procedure TForm1.btn27Click(Sender: TObject);
    var
      HTTP: TIdHTTP;
    begin
      tmr3.Enabled:=True;
      HTTP := TIdHTTP.Create(nil);
      HTTP.HandleRedirects := False;
      try
        HTTP.GET('http://site.ru');
      Finally
        if (Length(HTTP.Response.Location) > 0) and (HTTP.ResponseCode = 302) then
    
             //  ShowMessage('Redirect: ' + HTTP.Response.Location)
    
        else
           PlaySound('open.wav', 0, SND_ASYNC);
           tmr3.Enabled:=False;
        HTTP.Free;
        end;
    end;
    
    procedure TForm1.tmr3Timer(Sender: TObject);
    begin
    btn27Click(Self);
    end;
    
    Когда на сайте висит редирект выводит эту ошибку. Необходимо чтобы она не выводилась.