столкнулся с проблемой и не могу самостоятельно решить. собс-но какбы пишу прогу для вк, хотел сделать чекер в ней но не могу обработать невалидные аки. потому как не могу найти полезной инфы по теме обработки редиректа. поделитесь примерчиком обработки редиректа. заранее спасибо.
ну для 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: блин так и не понял в чем соль. сделал тестовую прогу и в ней все работает.
блин... почему то если так: 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=("ошибка!"); } то работает. подскажите что тут не так? всю голову сломал.
Ааа ты же для вк пишешь... Зачем тебе обрабатывать редирект то? Парсь ответ и смотри вошел ты или нет.
собсно в этом вся и проблема. когда идет запрос с неправильным логином или паролем: http://login.vk.com/?act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&email=mail%40yandex.ru&pass=pass&expire= то собсно парсить то и нечего, т.к. все виснет на этом моменте.
Хмм не должно.. Посмотри что за ошибка. Там вроде редирект идет куда то(щас не дома, сказать точно не могу)
ситуация немного прояснилась. в потоке в общем при первой попытке ничего невыдает, а при второй все таки срабатывает catch. как исправить чтоб при первой все срабатывало? upd: проблема не решилась. вопрос остается открытым
вот ппц... попробывал вместо 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=("Ошибка авторизации!"); } думаю мож инди тупит.
0pTik проблема в том что когда в ссылке не верный логин/пароль, блок catch(...){} не срабатывает, как я выяснил он срабатывает в потоке со второго раза почемуто. вот хочу выяснить это только у меня так или нет.
Catch срабатывает тогда когда сервер возвращает статут отличный от 200 ,а при невалид аке он лишь кинет тебя на другую страницу Но вернет 200 .Ты редиректы отключил или нет? PS Ты весь код покажи
редиректы и отключал и подключал стопицот раз)) мне непонятен момент: получается что прога подвисает на строчке с запросом и дальше неидет. как тогда быть? и почему тогда при статусе 302 с компонентом NMHTTP все прекрасно работает? P.S.: кода чекера нет. т.к. немогу справиться с редиректом. застрял на этом месте.
неа) я не знаю как сделать чтоб переходило. в запросе указан изначально url. а в гугле все пишут что обработку нужно делать при помощи конструкции try() catch(...){} в общем для меня это как говорится палка о двух концах )