C++ Builder и IdHTTP подскажите с обработкой редирект/а/ов

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by good_man, 18 Aug 2010.

  1. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    столкнулся с проблемой и не могу самостоятельно решить. собс-но какбы пишу прогу для вк, хотел сделать чекер в ней но не могу обработать невалидные аки. потому как не могу найти полезной инфы по теме обработки редиректа. поделитесь примерчиком обработки редиректа. заранее спасибо.
     
  2. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    handleredirects ? Не? Либо try .... except
     
  3. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    ну для C++ вроде как try...catch. впринципе понял куда копать ) но что то не могу вытащить из IdHTTP в catch{...} url редиректа из Location.

    делаю так:

    try {

    AnsiString url_l=Form1->IdHTTP1->Get("http://login.vk.com/?act=login&email=тут_неправильный_логин@mail.ru&pass=pass&expire=&vk=");

    } catch (...) {
    Form1->Memo1->Text=Form1->IdHTTP1->Get(Form1->IdHTTP1->Response->Location);
    }

    почему то поле локейшн пустое приходит (

    и еще вопросик... можно как то из потока обращаться к компонентам не прописывая все время Form1->Memo... ? где то прочитал что это есть плохо так обращаться к компонентам но как это исправить там не было написано.

    UPD:
    в общем заметил что вобще делаю что то совсем не правильное.

    дописал в catch: Form1->Memo1->Text="ошибка"; и нифига ниче не увидел (

    UPD:

    хм... убрал галочки с
    * Stop on Delphi Exceptions
    * Stop on C++ Exceptions

    тем самым избавился от визуальных ошибок. но catch так и не хочет работать.

    upd:
    блин так и не понял в чем соль. сделал тестовую прогу и в ней все работает. :)
     
    #3 good_man, 18 Aug 2010
    Last edited: 18 Aug 2010
  4. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    блин... почему то если так:

    try
    {
    IdHTTP1->Get("http://login.vk.com/?act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&email=*****%40yandex.ru&pass=gamno&expire=");
    }
    catch(...)
    {
    Memo1->Text=("ошибка!");
    }

    то не работает обработка, а если заменить ссыль:

    try
    {
    IdHTTP1->Get("http://login.vk.com/gamno.php");
    }
    catch(...)
    {
    Memo1->Text=("ошибка!");
    }

    то работает. подскажите что тут не так? всю голову сломал.
     
  5. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    good_man, HadleRedirects = false?
     
  6. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    fenixelite, пробывал ставить и false и true, результата нету все равно.
     
  7. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    Ааа ты же для вк пишешь... Зачем тебе обрабатывать редирект то? Парсь ответ и смотри вошел ты или нет.
     
  8. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    собсно в этом вся и проблема. когда идет запрос с неправильным логином или паролем:

    http://login.vk.com/?act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&email=mail%40yandex.ru&pass=pass&expire=

    то собсно парсить то и нечего, т.к. все виснет на этом моменте.
     
  9. fenixelite

    fenixelite Banned

    Joined:
    7 Feb 2010
    Messages:
    294
    Likes Received:
    56
    Reputations:
    6
    Хмм не должно.. Посмотри что за ошибка. Там вроде редирект идет куда то(щас не дома, сказать точно не могу)
     
  10. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    ситуация немного прояснилась. в потоке в общем при первой попытке ничего невыдает, а при второй все таки срабатывает catch. как исправить чтоб при первой все срабатывало?

    upd: проблема не решилась. вопрос остается открытым
     
    #10 good_man, 18 Aug 2010
    Last edited: 18 Aug 2010
  11. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Я б непарился а почитал бы RFC по http,и сделал бы все на сокетах.
     
  12. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    вот ппц... попробывал вместо IdHTTP использовать NMHTTP catch сработал сразу. но скорость просто ппц, нельзя его в софтине оставлять. ребят если есть у кого си ++ билдер можете у себя проверить код:

    AnsiString str;

    try
    {
    str=IdHTTP1->Get("http://login.vk.com/?act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&email=mail@yandex.ru&pass=pass&expire=");

    }
    catch(...)
    {

    Form1->Memo1->Text=("Ошибка авторизации!");

    }

    думаю мож инди тупит.
     
  13. 0pTik

    0pTik Banned

    Joined:
    18 Jul 2010
    Messages:
    240
    Likes Received:
    85
    Reputations:
    17
    А в чем собственно проблема то , код проверить не могу не дома , но написано вроде все верно.
     
  14. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    0pTik

    проблема в том что когда в ссылке не верный логин/пароль, блок catch(...){} не срабатывает, как я выяснил он срабатывает в потоке со второго раза почемуто. вот хочу выяснить это только у меня так или нет.
     
  15. 0pTik

    0pTik Banned

    Joined:
    18 Jul 2010
    Messages:
    240
    Likes Received:
    85
    Reputations:
    17
    Catch срабатывает тогда когда сервер возвращает статут отличный от 200 ,а при невалид аке он лишь кинет тебя на другую страницу Но вернет 200 .Ты редиректы отключил или нет?

    PS Ты весь код покажи
     
    #15 0pTik, 19 Aug 2010
    Last edited: 19 Aug 2010
  16. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    редиректы и отключал и подключал стопицот раз)) мне непонятен момент: получается что прога подвисает на строчке с запросом и дальше неидет. как тогда быть? и почему тогда при статусе 302 с компонентом NMHTTP все прекрасно работает?

    P.S.: кода чекера нет. т.к. немогу справиться с редиректом. застрял на этом месте.
     
    #16 good_man, 19 Aug 2010
    Last edited: 19 Aug 2010
  17. 0pTik

    0pTik Banned

    Joined:
    18 Jul 2010
    Messages:
    240
    Likes Received:
    85
    Reputations:
    17
    У тебя сниффер есть? Посмотри доходит запрос на сервер и кидает ли ему сервер редирект
     
  18. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    да конечно кидает.
     
  19. 0pTik

    0pTik Banned

    Joined:
    18 Jul 2010
    Messages:
    240
    Likes Received:
    85
    Reputations:
    17
    Переходит по режиректу?
     
  20. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    неа) я не знаю как сделать чтоб переходило. в запросе указан изначально url. а в гугле все пишут что обработку нужно делать при помощи конструкции try() catch(...){} в общем для меня это как говорится палка о двух концах )