Что нового

Антикаптча - нужна помощь в настройке...

Trans

Знающий
Сообщения
257
Репутация
6
Ребят, вот функция антикаптчи:
Код:
Func _CaptchaTest()
Local $data[4]
$data[0] = "method=base64"
$data[1] = "key=" & $INIPassKey
$data[2] = "ext=jpg"
$data[3] = "numeric=1"

Local $filenames[1]
$filenames[0] = 'body.jpg'

Local $host = 'antigate.com'
Local $page = '/in.php'
_HTTPConnect($host)
_HTTPPost_files($host, $page, $data, $filenames)

Local $captcha_id = _HTTPRead_capcha_id()
$page = '/res.php' & '?' & $data[1] & '&' & $data[3] & '&action=get&id=' & $captcha_id

Global $captcha_text

Sleep (5000)
While 1
	_HTTPGet_captcha($host, $page)
	$captcha_text = _HTTPRead_capcha_id()
	If Not @error then ExitLoop
	Sleep(2000)
WEnd
_HTTPClose()
_EnterCaptcha()
EndFunc

вот решил так модифицировать:

Код:
;~~~~~~~~~
While 1
	_HTTPGet_captcha($host, $page)
	$captcha_text = _HTTPRead_capcha_id()
	If Not StringInStr(1, 'CAPCHA_NOT_READY') then ExitLoop
	Sleep(2000)
WEnd
;~~~~~~~~~~~~~~~~


Но почему-то у меня всё равно выходит из цикла, даже если каптча не разгадана, и выдает ответ: 0...
Может у кого нибудь есть какие нибудь примеры...


Работа с http://antigate.com
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
Код:
If Not StringInStr(1, 'CAPCHA_NOT_READY') then ExitLoop

Ты проводишь проверку на наличие в строке "1" подстроки "CAPCHA_NOT_READY"
Меняй 1 на $captcha_text и всегда внимательно читай помощь
 

winstan

Эксплотатор)
Сообщения
406
Репутация
78
Код:
_HTTPRead_capcha_id()

И ещё функция точно в любом случаи возращает текст с сайта?
Т.к. я вижу использования @error .
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
Redline [?]
Ты проводишь проверку на наличие в строке "1" подстроки "CAPCHA_NOT_READY"Меняй 1 на $captcha_text и всегда внимательно читай помощь
Поменял 1 на $captcha_text, всё равно без результатно, не дожидаясь ответа (решения каптчи) выходит из цикла


Добавлено:
Сообщение автоматически объединено:

winstan [?]
И ещё функция точно в любом случаи возращает текст с сайта?Т.к. я вижу использования @error .
вот полностью функция
Код:
Func _HTTPRead_capcha_id($socket = -1)
#cs ----------------------------------------------------------------------------
	Errors:
		1 - соедиене закыто сервером
		2 - таймаут получения данных
		3 - в потоке данных не найдена id капчи
	Returns:
		id капчи
		0 - в случае ошибки
#ce ----------------------------------------------------------------------------
	Local $recv
	Local $data
	Local $end_data_flag = @crlf & '0'
	Local $start_capcha_id_flag = 'OK|'

	If $socket == -1 Then
		If $_HTTPLastSocket == -1 Then
			SetError(1)
			Return 0
		EndIf
		$socket = $_HTTPLastSocket
	EndIf

	Local $timer = TimerInit()

	While 1
		Sleep(10)
		$recv = TCPRecv($socket,16)
		If @error == 0 Then
			If $recv <> "" Then
				$timer = TimerInit()
				$data &= $recv
			EndIf

			If StringInStr($data, $end_data_flag) Then ExitLoop

			If TimerDiff($timer) > $_HTTPRecvTimeout Then
				SetError (2)
				Return 0
			EndIf

		EndIf

	WEnd

	Local $split = StringSplit($data,@CRLF,1)

	For $str in $split
		If StringInStr($str, $start_capcha_id_flag) Then Return(StringMid($str,4))

	Next

	SetError (3)
	Return 0

EndFunc

функция возвращает только *код* каптчи...
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
не у кого больше никаких идей нету?:smile:
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
Ребят, ну помогите пожалуйста:smile:
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
Trans [?]
функция возвращает только *код* каптчи...
Значит модифицируй функцию, чтобы при получении кода "CAPCHA_NOT_READY" с сайта, функция выдавала на выходе такую же строку.
Это нужно делать в этой строке (на сколько я понял):
Код:
If StringInStr($data, $end_data_flag) Then ExitLoop

Получил флаг - капча разгадана - выходим.
Не получил - выдавай строку 'CAPCHA_NOT_READY'
Как-то так:
Код:
If StringInStr($data, $end_data_flag) Then
    ExitLoop
Else
    Return 'CAPCHA_NOT_READY'
EndIf
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
Redline [?]
Получил флаг - капча разгадана - выходим.Не получил - выдавай строку 'CAPCHA_NOT_READY'
Либо я не правильно написал свою мысль, либо вы не совсем поняли...

Надо устранить зависание, которое образуется при таких ошибках сервера как:
ERROR_NO_SLOT_AVAILABLE
ERROR_IMAGE_IS_NOT_JPEG
ERROR_CAPTCHA_UNSOLVABLE
(при этих ошибках скрипт всё равно ожидает на каптчу)

А ваш вариант ещё при отправке на обработку, в поле для ввода каптчи вводит "CAPCHA_NOT_READY"
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
Черт ногу сломит в этих функциях :wacko: Get_captcha read_captcha_id

В общем нужно найти место в функции где мы получаем ответ от сервера (разгаданную капчу или ошибку). И в этом месте добавить проверку на содержимое ответа сервера. Если в содержимом ошибка - завершение функции, если нет - работаем дальше.

Еще плохо, что у тебя нет связи между функциями, т.е. делаем выполнение функции просто _функция1...(а,б,в) и дальше сразу $zzz = _функция2(г,д,е). Связь между этими функциями не видна, где итог выполнения первой функции? Старайся всегда писать так: $переменная = _функция(), иначе со временем даже ты запутаешься в своем коде.
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
Redline [?]
В общем нужно найти место в функции где мы получаем ответ от сервера
Только вот где найти... и Uninstall уже давно не заходил на форум...
 

winstan

Эксплотатор)
Сообщения
406
Репутация
78
на мой взляд должна быть строчка такая
Код:
If StringInStr($captcha_text, 'CAPCHA_NOT_READY') = 0 then ExitLoop
 

winstan

Эксплотатор)
Сообщения
406
Репутация
78
Если капча не разадана то что возвращает функция _HTTPRead_capcha_id() ?
[box title=]* :laugh:от избытка кода ещё больше путоници и не понятности :laugh:*[/box]
 
Автор
T

Trans

Знающий
Сообщения
257
Репутация
6
winstan [?]
Если капча не разадана то что возвращает функция _HTTPRead_capcha_id() ?

судя по этим комам
Код:
#cs ----------------------------------------------------------------------------
	Errors:
		1 - соедиене закыто сервером
		2 - таймаут получения данных
		3 - в потоке данных не найдена id капчи
	Returns:
		id капчи
		0 - в случае ошибки
#ce ----------------------------------------------------------------------------

То в случае ошибки должен выдовать 0
 

winstan

Эксплотатор)
Сообщения
406
Репутация
78
Почему тода нельзя использовать

Код:
;~~~~~~~~~
While 1
    _HTTPGet_captcha($host, $page)
    $captcha_text = _HTTPRead_capcha_id()
    If StringInStr($captcha_text, '0') < 2 then ;~это из предположения что ид не может начинаться на 0
        else
        ExitLoop
    endif
    Sleep(2000)
WEnd
;~~~~~~~~~~~~~~~~
 
Верх