Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2009, 23:37   #1
DeDoK
Форумчанин
 
Аватар для DeDoK
 
Регистрация: 05.11.2007
Сообщений: 392
По умолчанию captcha

как отловить капчу вконтакте и потом передать текст с нее опять на сайт?
DeDoK вне форума Ответить с цитированием
Старый 06.12.2009, 00:48   #2
AquaKlaster
Delphi,Python,PHP
Форумчанин
 
Аватар для AquaKlaster
 
Регистрация: 04.04.2009
Сообщений: 138
По умолчанию

На сколько мне припоминается то когда капчу можно отловить в исходном коде(то что прийдёт от Get/Post запроса) приходит что то вроди такого:
Код:
{"ok":-2,"captcha_sid":"703109533263","text":"Enter code"}
Парсим значение "captcha_sid", в данном случае это "703109533263", далее подставляем в ссылку вида http://vkontakte.ru/captcha.php?s=1&sid=******* (как вы догадались заместь ******* подставляем значение captcha_sid которые мы ранее спарсили) и получаем прямую ссылку на картинку каптчи!
Что бы потом текст картинки отослать ВК нужно сделать следующее:
1) Добавить в конец пост запроса(при логине, отправке сообщения и тд) значение captcha_sid.
2) Непосредственно добавить сам текст с картинки: в параметре captcha_key.
Например: я расмотрю на примере когда каптча "вылазит" при авторизации на сайт, для этого нам нужно отослать пост запрос с таким содержимым:
Код:
 op=a_login_attempt
captcha_sid=captcha_sid
captcha_key=captcha_key
captcha_sid = ранье спарсенное значение
captcha_key = сам текст с картинки

Более подробно о пост запросе вы можете узнать в любом HTTP снифере(HTTPAnalyzer и прочие аналоги)
AquaKlaster вне форума Ответить с цитированием
Старый 29.03.2010, 20:37   #3
mmmmm
 
Аватар для mmmmm
 
Регистрация: 29.03.2010
Сообщений: 4
По умолчанию

Я извлекаю из полученной строки:
Код:
{"ok":-2,"captcha_sid":"684102684363","text":"Enter code","difficult":1}<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.7.59</center>
</body>
</html>
ключ:"684102684363"
и склеиваю вот так:
Код:
http://vkontakte.ru/captcha.php?s=1&sid=684102684363
так он уже другое изображение показывает
mmmmm вне форума Ответить с цитированием
Старый 29.03.2010, 23:38   #4
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

в браузере проверяете? в браузере бесполезно такую проверку делать
Voody вне форума Ответить с цитированием
Старый 30.03.2010, 01:35   #5
mmmmm
 
Аватар для mmmmm
 
Регистрация: 29.03.2010
Сообщений: 4
По умолчанию

Не в браузере.
Кидаю я такой запрос:
Код:
POST /register.php?act=register HTTP/1.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.8) Gecko/20100202 MRA 5.6 (build 03278) Firefox/3.5.8 (.NET CLR 2.0.50727) sputnik unknown
Cookie=chauth=1; chcookie=1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://vkontakte.ru/
Host: vkontakte.ru
Content-Length: 162
Expect: 100-continue

&timezone=120&by_login=0
first_name=Vasya&last_name=Zaicev&regemail=Vasyazaicevololo%40maillo%2Eru&regpass=111111run&sex=1
В ответ я получаю это:
Код:
    HTTP/1.1 100 Continue


    HTTP/1.1 200 OK
    Server: nginx/0.7.59
    Date: Mon, 29 Mar 2010 19:22:55 GMT
    Content-Type: text/html; charset=windows-1251
    Connection: keep-alive
    X-Powered-By: PHP/5.2.6-1+lenny3
    Pragma: no-cache
    Cache-control: no-store
    Set-Cookie: remixchk=5; expires=Fri, 08-Apr-2011 09:48:24 GMT; path=/; domain=.vkontakte.ru
    Vary: Accept-Encoding
    Content-Length: 72

    {"ok":-2,"captcha_sid":"371921525744","text":"Enter code","difficult":1}
    <html>
    <head><title>400 Bad Request</title></head>
    <body bgcolor="white">
    <center><h1>400 Bad Request</h1></center>
    <hr><center>nginx/0.7.59</center>
    </body>
    </html>
И вот. Я беру этот ключ :"371921525744" и пихаю его в имадже:
http://vkontakte.ru/captcha.php?s=1&sid="371921525744"
Так он уже другую каптчу показывает (вроде бы как)
mmmmm вне форума Ответить с цитированием
Старый 30.03.2010, 12:39   #6
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

почему вы так решили? вы запрос программой делаете? значит капчу запрашиваете только один раз
Voody вне форума Ответить с цитированием
Старый 30.03.2010, 16:30   #7
mmmmm
 
Аватар для mmmmm
 
Регистрация: 29.03.2010
Сообщений: 4
По умолчанию

Да, я это в программе делаю
После того, как получаю это:
Код:
    HTTP/1.1 100 Continue


    HTTP/1.1 200 OK
    Server: nginx/0.7.59
    Date: Mon, 29 Mar 2010 19:22:55 GMT
    Content-Type: text/html; charset=windows-1251
    Connection: keep-alive
    X-Powered-By: PHP/5.2.6-1+lenny3
    Pragma: no-cache
    Cache-control: no-store
    Set-Cookie: remixchk=5; expires=Fri, 08-Apr-2011 09:48:24 GMT; path=/; domain=.vkontakte.ru
    Vary: Accept-Encoding
    Content-Length: 72

    {"ok":-2,"captcha_sid":"371921525744","text":"Enter code","difficult":1}
    <html>
    <head><title>400 Bad Request</title></head>
    <body bgcolor="white">
    <center><h1>400 Bad Request</h1></center>
    <hr><center>nginx/0.7.59</center>
    </body>
    </html>
Я отыскиваю в полученных данных ключ и соединяю его со строкой:
Код:
http://vkontakte.ru/captcha.php?s=1&sid=
И получается:
Код:
http://vkontakte.ru/captcha.php?s=1&sid=371921525744
После того, как соединилась он загружает каптчу, но эта уже другая каптча получается.
Подскажите пожалуйста кто нибуть, как мне сделать, чтобы она загрузила именно ту каптчу, которую нужно
mmmmm вне форума Ответить с цитированием
Старый 30.03.2010, 17:52   #8
mosq
Пользователь
 
Регистрация: 28.08.2009
Сообщений: 90
По умолчанию

вот часть процедуры, которая берет капчу из вконтакте.
основной смысл - надо брать ид картинки с вконтакте, и подставлять в урл апи.рекапча.ком

Код:
s:=EmWB.OleObject.document.GetElementByID('recaptcha_challenge_field').value;
s:='http://api.recaptcha.net/image?c='+s;
//download image
try UrlDownloadToFile(nil, PChar(s),PChar('captcha.jpg'), 0, nil);
mosq вне форума Ответить с цитированием
Старый 30.03.2010, 19:49   #9
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Если вы в программе делаете, как вы видите, что получаете какую-то другую капчу? Вы же ее запрашиваете один раз. Делаете запрос, получаете captcha_sid, запрашиваете капчу. Один раз.
Voody вне форума Ответить с цитированием
Старый 30.03.2010, 23:22   #10
mmmmm
 
Аватар для mmmmm
 
Регистрация: 29.03.2010
Сообщений: 4
По умолчанию

Всё, я понял. Всем спасибо

Последний раз редактировалось mmmmm; 31.03.2010 в 00:00.
mmmmm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как загрузить captcha и поместить её в TImage Streetracer Работа с сетью в Delphi 13 06.03.2010 01:45