Что нового

Отправить картинку на Rucaptcha

Centrinar

Новичок
Сообщения
100
Репутация
1
Подскажите как отправить картинку на Рукапчу. Нашел тему: http://autoit-script.ru/index.php?topic=21349.0
Но там вариант неработает
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Можно это попробовать. Просто адрес antigate.com заменить на rucaptcha.com... Думаю, что должно работать.
Вот как пример:
Код:
#AutoIt3Wrapper_Run_AU3Check=n
Global $_DEBUG=True
#include "api.au3"
Global Const $sMyApiKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

MsgBox(0, "баланс", _antigatecom_balance($sMyApiKey) )

Local $sText = _antigatecom_get($sMyApiKey, "D:\Путь_до_картинки.png")
If @error Then
	ConsoleWrite("Ошибка при распозновании! " & $sText & @CRLF)
	Else
	ConsoleWrite("Распознанный текст: " & $sText & @CRLF)
EndIf
 
Автор
C

Centrinar

Новичок
Сообщения
100
Репутация
1
Неа, пишет ключ неверный в запросе, хотя он верный
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
А где взять #include "api.au3"
Вот, держите, уже я заменил, попробуйте... api_rucaptcha.au3
Код:
; edited by Alex33, 10.04.2016, rucaptcha
#include-once
;Opt('MustDeclareVars', 1) ; декларирование переменных

; #INDEX# =======================================================================================================================
; Title .........: rucaptcha.com
; AutoIt Version : 3.0
; Language ......: Russian
; Website: ......: http://rucaptcha.com/?action=api
; Description ...: API функции для работы с сервисом разгадывания капчи http://rucaptcha.com/
; Author(s) .....: SERJ
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
;_antigatecom_balance:     Получение текущего денежного баланса
;_antigatecom_get:         Отправка изображения и получение текста капчи
;_antigatecom_bad:         Пожаловаться на неправильно разгаданный текст
;_antigatecom_stats:       Получение статистику использования аккаунта
;_antigatecom_statsSystem: Статистика системы в реальном времени
; ===============================================================================================================================

; #INTERNAL_USE_ONLY# ===========================================================================================================
;__antigatecom_upload:     Отправка изображения на сервер
;__antigatecom_check:      Получение статуса капчи
;__antigatecom_error:      Перевод текста ошибки на понятный язык
; ===============================================================================================================================

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_balance
; Description ...: Получение текущего денежного баланса
; Syntax.........: _antigatecom_balance($apiKey)
; Parameters ....: $apiKey - ключ аккаунта
; Return values .: Success: баланс
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func _antigatecom_balance($apiKey)
  Local $sResp = InetRead('http://rucaptcha.com/res.php?key=' & $apiKey & '&action=getbalance')
  $sResp = BinaryToString($sResp)
  Local $sOut = __antigatecom_error($sResp)
  If $_DEBUG Then ConsoleWrite('--> проверка баланса: ' & $sOut & @LF)
  If StringInStr($sResp, 'ERROR_') Then SetError(1)
  Return $sOut
EndFunc ;==> _antigatecom_balance

; #FUNCTION# ====================================================================================================================
; Name...........: __antigatecom_upload
; Description ...: Отправка изображения на сервер
; Syntax.........: __antigatecom_upload($apiKey, $pathFile)
; Parameters ....: $apiKey - ключ аккаунта
;                  $pathFile - путь до изображения с капчёй
; Return values .: Success: id капчи
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func __antigatecom_upload($apiKey, $pathFile)

  ;~~~ проверка существования файла
  If Not FileExists($pathFile) Then
    If $_DEBUG Then ConsoleWrite('--> файл "' & $pathFile & '" не найден' & @LF)
    SetError(1)
    Return 'ERROR_FILE_NOT_FOUND'
  EndIf

  ;~~~ читаем файл капчи
  Local $binFile = FileRead($pathFile)
  If @error Then
    If $_DEBUG Then ConsoleWrite('--> невозможно прочитать файл "' & $pathFile & '"' & @LF)
    SetError(2)
    Return 'ERROR_FILE_NOT_READ'
  EndIf

  ;~~~ определяем тип файла
  Local $ext = StringSplit($pathFile, '.')
  $ext = $ext[$ext[0]]
  Local $ContentType
  Switch $ext
    Case 'jpg'
      $ContentType = 'image/jpeg'
    Case 'gif'
      $ContentType = 'image/gif'
    Case 'png'
      $ContentType = 'image/png'
    Case Else
      If $_DEBUG Then ConsoleWrite('--> не поддерживаемый формат изображения "' & $ext & '"' & @LF)
      SetError(3)
      Return 'ERROR_IMAGE_TYPE_NOT_SUPPORT'
  EndSwitch

  ;~~~ собираем тело пакета
  Local $boundary = '----AFnIn7z0bMWeTdpy' ; задаём разделитель данных в HTTP запросе
  Local $content = '--$boundary' & @LF
  $content &= 'Content-Disposition: form-data; name="method"' & @LF & @LF
  $content &= 'post' & @LF ; метод передачи данных
  $content &= '--' & $boundary & @LF
  $content &= 'Content-Disposition: form-data; name="key"' & @LF & @LF
  $content &= $apiKey & @LF ; ключ
  ;$content &= '--' & $boundary & @LF
  ;$content &= 'Content-Disposition: form-data; name="regsense"' & @LF & @LF
  ;$content &= '1' & @LF ; с учетом регистра
  $content &= '--' & $boundary & @LF
  $content &= 'Content-Disposition: form-data; name="file"; filename="captcha.' & $ext & '"' & @LF
  $content &= 'Content-Type: ' & $ContentType & @LF & @LF
  $content &= $binFile & @LF ; содержимое ФАЙЛА капчи, БЕЗ какого либо кодирования, целиком
  $content &= '--' & $boundary & '--'

  ;~~~ отправка капчи
  Local $oWinHttp = ObjCreate('WinHttp.WinHttpRequest.5.1') ; создаём COM-объект
  With $oWinHttp
    .Open('POST', 'http://rucaptcha.com/in.php', 0) ; создаём соеденение, указываем адрес страницы
    .SetRequestHeader('Content-Type', 'multipart/form-data; boundary=' & $boundary) ; тип отправляемого запроса
    .SetRequestHeader('Content-Length', BinaryLen($binFile)) ; длина запроса
    .Send(StringToBinary($content, 1)) ; отправляем запрос
    Local $sResp = .ResponseText ; получаем ответ
  EndWith

  ;~~~ разбираем ответ отправки
  Dim $idCapcha = StringSplit($sResp, '|') ; парсим ответ
  If $idCapcha[1] = 'OK' Then
    $idCapcha = $idCapcha[2]
    If $_DEBUG Then ConsoleWrite('--> id капчи: ' & $idCapcha & @LF)
    Return $idCapcha
  Else
    Local $sOut = __antigatecom_error($sResp)
    If $_DEBUG Then ConsoleWrite('--> сервер вернул ошибку: ' & $sOut & @LF)
    SetError(4)
    Return $sOut
  EndIf

EndFunc ;==> __antigatecom_upload

; #FUNCTION# ====================================================================================================================
; Name...........: __antigatecom_check
; Description ...: Получение статуса капчи
; Syntax.........: __antigatecom_check($apiKey, $idCaptcha, $secTimeout)
; Parameters ....: $apiKey - ключ аккаунта
;                  $idCaptcha - id капчи
;                  $secTimeout - таймаут проверки капчи (минимум 5 сек.), не обязательно для указания
; Return values .: Success: текст капчи
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func __antigatecom_check($apiKey, $idCaptcha, $secTimeout = 5)
  ;If $secTimeout < 5 Then $secTimeout = 5
  Local $sResp
  While 1
    Sleep(1000*$secTimeout)
    $sResp = InetRead('http://rucaptcha.com/res.php?key=' & $apiKey & '&action=get&id=' & $idCaptcha & '&rnd=' & Random())
    $sResp = BinaryToString($sResp)
    Local $textCaptcha = StringSplit($sResp, '|') ; парсим ответ
    If $textCaptcha[1] = 'OK' Then
      $textCaptcha = $textCaptcha[2]
      If $_DEBUG Then ConsoleWrite('--> текст капчи: ' & $textCaptcha & @LF)
      Return $textCaptcha
    ElseIf $sResp = 'CAPCHA_NOT_READY' Then
      If $_DEBUG Then ConsoleWrite('--> капча ещё не распознана' & @LF)
    Else
      Local $sOut = __antigatecom_error($sResp)
      If $_DEBUG Then ConsoleWrite('--> ошибка распознавания капчи: ' & $sOut & @LF)
      SetError(1)
      Return $sOut
    EndIf
  WEnd
EndFunc ;==> __antigatecom_check

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_bad
; Description ...: Пожаловаться на неправильно разгаданный текст
; Syntax.........: _antigatecom_bad($apiKey, $idCaptcha)
; Parameters ....: $apiKey - ключ аккаунта
;                  $idCaptcha - id капчи
; Return values .: Success: 1
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 17/06/2013
; ===============================================================================================================================
Func _antigatecom_bad($apiKey, $idCaptcha)
  If $_DEBUG Then ConsoleWrite('--> жалуемся на капчу с id #' & $idCaptcha & @LF)
  Local $sResp = InetRead('http://rucaptcha.com/res.php?key=' & $apiKey & '&action=reportbad&id=' & $idCaptcha)
  $sResp = BinaryToString($sResp)
  Local $sOut = __antigatecom_error($sResp)
  If $sResp <> 'OK_REPORT_RECORDED' Then SetError(1)
  Return $sOut
EndFunc ;==> _antigatecom_bad

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_get
; Description ...: Отправка изображения и получение текста капчи
; Syntax.........: _antigatecom_get($apiKey, $pathFile, $secTimeout)
; Parameters ....: $apiKey - ключ аккаунта
;                  $pathFile - путь до изображения с капчёй
;                  $secTimeout - таймаут проверки капчи (минимум 5 сек.), не обязательно для указания
; Return values .: Success: текст капчи
;                  Failure: @error и текст ошибки
; Related .......: __antigatecom_upload, __antigatecom_check
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func _antigatecom_get($apiKey, $pathFile, $secTimeout = 5)

  ;~~~ отправка изображения на сервер
  Local $idCaptcha = __antigatecom_upload($apiKey, $pathFile)
  If @error Then
    If $_DEBUG Then ConsoleWrite('--> ошибка отправки картинки: ' & $idCaptcha & @LF)
    SetError(1)
    Return 'ERROR_UPLOAD'
  EndIf

  If Not IsDeclared('_IDCAPTCHA') Then Global $_IDCAPTCHA
  $_IDCAPTCHA = $idCaptcha ; для того, чтобы можно было жаловаться

  ;~~~ получение текста капчи
  Local $textCaptcha = __antigatecom_check($apiKey, $idCaptcha, $secTimeout)
  If @error Then
    If $_DEBUG Then ConsoleWrite('--> ошибка получения текста капчи: ' & $textCaptcha & @LF)
    SetError(2)
    Return 'ERROR_CHECK'
  EndIf

  Return $textCaptcha
EndFunc ;==> _antigatecom_get

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_stats
; Description ...: Получение статистику использования аккаунта
; Syntax.........: _antigatecom_stats($apiKey, $date)
; Parameters ....: $apiKey - ключ аккаунта
;                  $date - дата, за которую требуется получить статистику (формат ДД.ММ.ГГГГ), не обязательно для указания
; Return values .: Success: текст капчи
;                  Failure: @error и текст ошибки
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func _antigatecom_stats($apiKey, $date = '')
  If Not $date Then $date = @MDAY & '.' & @MON & '.' & @YEAR
  MsgBox(0, '', $date)
  Local $aDate = StringSplit($date, '.')
  $date = $aDate[3] & '-' & $aDate[2] & '-' & $aDate[1]
  Local $sResp = InetRead('http://rucaptcha.com/res.php?key=' & $apiKey & '&action=getstats&date=' & $date)
  $sResp = BinaryToString($sResp)
  Local $sOut = __antigatecom_error($sResp)
  If StringInStr($sResp, 'ERROR_') Then SetError(1)
  Return $sOut
EndFunc ;==> _antigatecom_stats

; #FUNCTION# ====================================================================================================================
; Name...........: _antigatecom_statsSystem
; Description ...: Статистика системы в реальном времени
; Syntax.........: _antigatecom_statsSystem()
; Parameters ....: none
; Return values .: необходимо доработать
; Author ........: SERJ
; Modified.......: 16/06/2013
; ===============================================================================================================================
Func _antigatecom_statsSystem()
  ; waiting:                количество работников ожидающих капчу. Максимально показываемое число - 50.
  ; load:                   процент загрузки работников
  ; minbid:                 минимальная ставка необходимая для прохождения вашей капчи
  ; averageRecognitionTime: среднее время (в секундах) за которое в данный момент разгадываются капчи
  Local $sResp = InetRead('http://rucaptcha.com/load.php')
  $sResp = BinaryToString($sResp)
  Return $sResp
EndFunc ;==> _antigatecom_statsSystem

; #FUNCTION# ====================================================================================================================
; Name...........: __antigatecom_error
; Description ...: Перевод текста ошибки на понятный язык
; Syntax.........: __antigatecom_error($sError)
; Parameters ....: $sError - текст ошибки, возвращаемый сервером
; Return values .: ...
; Author ........: SERJ
; Modified.......: 17/06/2013
; ===============================================================================================================================
Func __antigatecom_error($sError)
  Switch $sError
    Case 'ERROR_WRONG_USER_KEY'
      Return 'Неправильный формат ключа учетной записи (длина не равняется 32 байтам)'
    Case 'ERROR_KEY_DOES_NOT_EXIST'
      Return 'Вы использовали неверный captcha ключ в запросевы использовали неверный captcha ключ в запросе'
    Case 'ERROR_ZERO_BALANCE'
      Return 'Нулевой либо отрицательный баланс'
    Case 'ERROR_NO_SLOT_AVAILABLE'
      Return 'Нет свободных работников в данный момент, попробуйте позже либо повысьте свою максимальную ставку'
    Case 'ERROR_ZERO_CAPTCHA_FILESIZE'
      Return 'Размер капчи которую вы загружаете менее 100 байт'
    Case 'RROR_TOO_BIG_CAPTCHA_FILESIZE'
      Return 'Ваша капча имеет размер более 100 килобайт'
    Case 'ERROR_WRONG_FILE_EXTENSION'
      Return 'Ваша капча имеет неверное расширение, допустимые расширения JPG, JPEG, GIF, PNG'
    Case 'ERROR_IMAGE_TYPE_NOT_SUPPORTED'
      Return 'Невозможно определить тип файла капчи, принимаются только форматы JPG, GIF, PNG'
    Case 'ERROR_IP_NOT_ALLOWED'
      Return 'Запрос с этого IP адреса с текущим ключом отклонен. Пожалуйста смотрите раздел управления доступом по IP'
    Case 'CAPCHA_NOT_READY'
      Return 'Капча еще не распознана, повторите запрос через 1-5 секунд'
    Case 'ERROR_WRONG_ID_FORMAT'
      Return 'Некорректный идентификатор капчи, принимаются только цифры'
    Case 'ERROR_CAPTCHA_UNSOLVABLE'
      Return 'Капчу не смогли разгадать 5 разных работников'
    Case 'OK_REPORT_RECORDED'
      Return 'Жалоба на неверно разгаданную капчу принята'
    Case Else
      Return $sError
  EndSwitch
EndFunc ;==> __antigatecom_error


Centrinar сказал(а):
Неа, пишет ключ неверный в запросе, хотя он верный
Заменяли? :smile:
alex33 сказал(а):
Просто адрес antigate.com заменить на rucaptcha.com...
 
Автор
C

Centrinar

Новичок
Сообщения
100
Репутация
1
Да, все так и есть. Баланс выдает верно а вот саму капчу выдает ошибку ERROR_CHECK
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Centrinar сказал(а):
Да, все так и есть. Баланс выдает верно а вот саму капчу выдает ошибку ERROR_CHECK
1. Что написано в консоле?
2. Покажите ваш код.
 
Автор
C

Centrinar

Новичок
Сообщения
100
Репутация
1
Код:
#AutoIt3Wrapper_Run_AU3Check=n
Global $_DEBUG=True
#include "api.au3"
Global Const $sMyApiKey = "ххххххх"

MsgBox(0, "баланс", _antigatecom_balance($sMyApiKey) )

Local $sText = _antigatecom_get($sMyApiKey, @ScriptDir & '\image.gif')
If @error Then
    ConsoleWrite("Ошибка при распозновании! " & $sText & @CRLF)
    Else
    ConsoleWrite("Распознанный текст: " & $sText & @CRLF)
 EndIf

 MsgBox(0, "результат", $sText )



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

Вложения

  • Screenshot_3.jpg
    Screenshot_3.jpg
    4.5 КБ · Просмотры: 258
A

Alofa

Гость
OffTopic:
Извините что вмешиваюсь, но возможно эта информация поможет:
https://rucaptcha.com/api-rucaptcha сказал(а):
Загрузка капчи
Адрес для загрузки капчи: http://rucaptcha.com/in.php
Загрузка капчи возможна в двух форматах:
multipart и base64

Пример загрузки в формате multipart:
<form method="post" action="http://rucaptcha.com/in.php" enctype="multipart/form-data">
<input type="hidden" name="method" value="post">
Ключ от учетной записи:
<input type="text" name="key" value="YOUR_APIKEY">
Файл капчи:
<input type="file" name="file">
<input type="submit" value="загрузить и получить ID">
</form>

YOUR_APIKEY - Ваш key, длинной 32 символа
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Alofa сказал(а):
OffTopic:
Извините что вмешиваюсь, но возможно эта информация поможет:
1
Cервис антикапчи RuCaptcha.com не только поддерживает стандартное API на равне с сервисами pixodrom, antigate, anti-captcha и других, но и предоставляет расширенный фукнционал
2
Все форматы API
Поддерживаем deathbycaptcha, antigate, de-captcher


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

Я запустил, у меня всё нормально работает.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Alofa
Ну да, естественно.


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

Качайте, суйте свой ключ и тестируйте. Вот рабочий пример, который у меня работает. rucap_test.zip (5.08 kb).
 
A

Alofa

Гость
Да я просто смотрю что Centrinar в #6 посте, на тот момент так и оставил
Код:
#include "api.au3"
; вместо
#include "api_rucaptcha.au3"
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Alofa, Ну а может быть он просто заменил код в том файле и всё... :smile: Хотя... Всё может быть...
 
Автор
C

Centrinar

Новичок
Сообщения
100
Репутация
1
Вот такая вот ошибка:

Код:
--> id капчи: 1003875492
--> капча ещё не распознана
--> капча ещё не распознана
--> капча ещё не распознана
--> ошибка распознавания капчи: Капчу не смогли разгадать 5 разных работников
--> ошибка получения текста капчи: Капчу не смогли разгадать 5 разных работников
Ошибка при распозновании! ERROR_CHECK



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

Блин, ну неужели только у меня одного ошибка, жесть...


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

ЛЕЛИК, ПО МО ГИ ТЕ :'(
 

MrDio

Новичок
Сообщения
8
Репутация
0
Столкнулся с той же проблемой. Баланс запрашивается корректно, но картинка на rucaptcha не передается.
С помощю HTTP Analyzer проанализировал запросы, которые выдает в мир AutoIt и браузер. Получились вот такие результаты:

Autoit
POST /in.php HTTP/1.1
Connection: Keep-Alive
Content-Type: multipart/form-data; boundary=----AFnIn7z0bMWeTdpy
Accept: */*
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Host: rucaptcha.com
Content-Length: 6641

--$boundary
Content-Disposition: form-data; name="method"

post
------AFnIn7z0bMWeTdpy
Content-Disposition: form-data; name="key"

....тут_ключ.....
------AFnIn7z0bMWeTdpy
Content-Disposition: form-data; name="file"; filename="G:\Autoit\rucapcha\123.jpg"
Content-Type: image/jpeg

0xFFD8FFE000104A46494600010101007800780000FFDB004300080606070605080707070909080A0C140D0C0B0B0C1912130F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F27393D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232FFC0001108003C00B403012200021101031101FFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D01020300041105122131410613516107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A434445464748494A535455565758595A636465666768696A737475767778797A838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F0100030101010101010101010000000000000102030405060708090A0BFFC400B51100020102040403040705040400010277000102031104052131061241510761711322328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728292A35363738393A434445464748494A535455565758595A636465666768696A737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00F7A9A64822695C3955EA1119CFE401269B0DCC3719F2DB247DE520865FA83C8A9EAB4F676D72E8F3C11C8D183B199412B9EB83DBA0A6ADD4352C5159E747B6F33CC12DE860723FD325C0FF0080EEC7E18A7FF672B84F3EE6EA664390DE718FF309B41FCA8B2EE2D4BB45531A6DA86CA23C79EAB1C8CAA7DF00E33EFD693EC11A49E6C535C23E31CCCCCB8FF75895FD3345906A5DA2BC76EFE2678A756F12DE687E11D3ED6FDA0720DC988A800704F2F8C67B93CFA5676B3E34F8A3E0F78AF75CB1B47B276D9C22B267D3721CA9FAD4DD232F6F1EC7AE3F87E2B88956F2FF00539DC0FF0058B78F013F842517F4A77F65CF6906CD2EF5A26C8DDF6D692E811FF0290303FF0002C7B566E87AF5C7883C2D69AD417B656E9247BA432C04AA30E181FDE0C60FBFBD725ACFC573A66AC9058791ABC16A49D4CC36F246624E9B9492DC03D4F20E40E3AD5DB4DCBD2DCDD0EEE69FC451C9B60D3B4B9D07FCB492FE4889FF0080885B1F99AC9BAD5FC43797A2CF493A7ACE9C5C66379A38BFEDAEE4F9B3DB61A6413EABACAF99A85F269963260C62DD813229E54897953907B1E71D0574164DA7D927D92CE07891704ED81C2B76CEEC618F1D7268E566CA308AD5DD9CEF88B57D4FC1BA0FF68DF6B76F3DBC6CA84C9A66F9A463D7EECA8BEB8E0600E727934F42F8AFA06AB72229B50B1B742B95696478DCB7A1564DABF83B55FF0088BE1D97C5BE12934FB7B858245952659240767CBD738E7A13F95731E33F0F782ACBC0571A97F63D94B2DBC2228A7B43B374C46D058A119F9B9E735367B9CD355136D6C7A7596A365A8C465B1BC82EA30705E0903807D322AC1654196200F735E19E07BD93C03F092FBC49246A6E350B8C5B237F163E55C8FA873F4AB51FC2EF12F8B34D5D635EF13DC45A85C27991DB142522CF214FCC36FD00E3DE95C154765A5D9ED1E6C7FDEE9479C9D893EC057957C2CF166A6BAADE782FC43217D42C73F6791CE4B2AF0533FC58EA3DB3E95EB14F43484E3257447B9DB8552A0F73FE14A8841C9624FE94FA5A2E5DC28A28A0414514500145145001451486800A8AE23696DA5446DACC8403E8714AED22A128819B1C066C0FCEB30EAF2AB4F198AD9A7894910C573B9C9C640C6D18CD4F3A2953725A1E59F04A7B7D2F55D7B45BD6116A9E70C249C3305DC180FC79C5755F17B56D26D3C07A858DECF1FDAAE9556DE0DC0BB36E04363D06339F6F7AC6D77C136FF106F1F5482D65D2B5085BCB9250C3E761EA319C8E39AE0FC77F0FADFC25A247797FABCD77AADCCA23822CE4328FBCC49E78E9F88A1E88E79D2A9462E32B7DE763F0634D7D47C26ED7924B2D9C774DE55B1E23638192DFDEEDC5773A4C9E16F10BEADFD996D612C983657C638B6B329C8DA4E0654F3F5C7B552F09F87E3F097C3C83ED7E72CF05B3DCCEA26750AC46E618071C74FC2B96F8156093E83AD5FBEEDD7178222CAC4361577751CFFCB4AA4D685A9E918324F006B9A8685E36BDF005F4A9F64B62FF00602E06FDB9DE064637655B3F854DF17F5ABB8A7D0FC3BA6DF3DB5E5FDC069254936144CED5CFFB24927FE015CF7C6BD267D135CD2BC4BA6CF3C12B8F29A6591B72BAFDD3BBDC13F951F0F6F24F1EFC5697C47756D1C0B636AA5614390AFB7671F525DB9E9EA695FA18F35AF0F3FC0F705B88D2107748EA07DE084EEF7E0735E3BF1A3583AADD68DE15B166F36E6559A6050823276A023AF7638F615ED47A5787783ADE6F167C6CD635CBA89D62D39D822BAE3691FBB4523B1C027EA0D37634ACD5947B9D07C51F0EFDA3E174163A40F3A3D21E27D919DC7CB44643D3D0367F0349A6FC70F0C9D1E192FF00ED515EAC63CD8121DD96EFB4F4C7D715E917D7D69A6D94B797D3A416F12969247380057916A5E39F0C5F6AD25AF84BC2B61A9EA4C378BB9EDE3822E0658967DA7819193B79F5EE3227EE3BC59C52F8BC6B1F1A34FF00105A42F690CF790C415FEF18CE2324FB9526BE9CAF986E351D7FC7DE3DD362B3B1D3E0BEB0E224858340BE5B1724B2920AE7D2BD4D8FC5DBEB7F2C0D074D698FFAC5CB3C1B4FBEE53BB1E8DF7BB76944D19B57D2E7A2DCDDDB595BBDC5D5C45042832D24AE1557EA4F4AE2EFBE2CF866DE77B6B092EB57B94621A2D3A0321C0EAC1B8523DC1AA769F0CAE3547171E35D7EF75967F99ECD2568AD95F18CAAA91D07A05AEE34DD234FD22D63B6D3ECE1B6863508AB1AE38F73D4FD4D335F7E5B687047E2B5F3AB35BF817C4122BB03013011E6A773C03CE3B0CFD681F1335DBD91A3D33C05AC49BF8824B8531A311F7B71C6170430FBDDBF0AF4BE3D28A03927FCC52D2EE2EEE74AB59EFED3EC9772461A5803EEF2DBB8C8EB455DA2A8BB3EE2D1454534F14119925916341D599B007E348AB5C92AA5FEA36BA65A9B8BA94471838C9EA4FA0F5358F7BE2496793ECDA0DA9BE9B9CCBFF2CA33E84F1EFDEA6B1F0F05BCFED0D526FB6DF60005946C8B072368ED8F5A7636549455E7A79752A3DA6B7AFCA1EE267D374FED0237EF5F9FE23DB20F4CFE15B1A768B61A54412D2DD15B6E0C84659BEA6B428A4C9955935CAB447862785BC77F0EB5DBD97C316C353D2EE9B21090C40C9DA19720EE19EA383FA56CF85FC07AEEBBE244F1478E9F33C241B5B1CAED4C72A485E001E9D49E4FBFAD5151ECE37BD8E6F64AFBE8731F10AE92C7E1EEBB3103E6B47887D5C6C1FAB5627C1AD3BEC5F0E6D24E86EA59273F9EDFE4A2B13E2F78CF49B9F0E5C786B4EBB5BBD46E668D1E283E7D9B5836091DF200C75AEEFC3DA34FA7780ECB48595ADEE52CBCB3201931C85793F831A3923D09BF354BAE88C5F8BF696F73F0DF527B9214DB98E589BD1F7851C7BEE23F1AF19F05EA67C3A969AB6853DD5FEAEAEE6FB4A86090ABDB8E373301818EB9E7048FA55C9BC31F103C4DE269743D46E3549ADD27DB24D70CC200ABC07C7DD3C7231D735F40683E1CD2BC37A7C767A5D9C5022A80CE146F93DD9BAB1A5CADBDC8B3AB2BAD0E0B4CBAF1FF008D34F5D5B4DD7F48D32C6525E08EDE2F3DD7FE99C85971900F2477ED5343F0EFC5893961F106E547F13A59857933C1DC7772400304E71CE315B1A47872FBC2DE31923D22DFFE299BF8DA5961122E2D2E7D554904230C703773D80C5768541EB472C96A9DCD234D35EF6E701A7FC27D245EA5F6BD7B7DAFDDC47F76F7F2B3AAA0E429049DC3249C1E39E955F55F829E15D4B507BB8FED767BCE5A1B67558FF0054E3F0E2BD1B6FB9A369FEF1A777D8B74A0D1CF7857C11A2783E19174BB7612CBFEB2795B748C3B0CF61EC315D1D2723DE941C8E94D4BA14A2A2AC85A28A2A861451450014514500724759D7B5A2068D602DAD8F4BABA18C8C64103D3A8EFD7B54E3C1F6F732ACDAADE5CDF48392ACFB532473803A0FA1AE968A773775DA5682B7E7F7905B5AC169108ADE18E28C7215140153D1452306DBD58B451450014D650CA54F7E29D49401CAE89F0EFC31E1FBD37B65A621BBDC584D3319194FF00B39E17EA39AEAE928340A3151D10B45145030A28A2800A28A2800A28A2800A28A2800A28A2800A28A2803FFFD9
------AFnIn7z0bMWeTdpy--

Браузер эксплорер при отправки формы
POST /in.php HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ru-RU
Content-Type: multipart/form-data; boundary=---------------------------7e030c24904a2
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: rucaptcha.com
DNT: 1
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: PHPSESSID=8o8hfotlq02g0vhmi66uhee1n2; counter_user_id=82864535; _ga=GA1.2.1835915191.1461766266
Content-Length: 3586

-----------------------------7e030c24904a2
Content-Disposition: form-data; name="method"

post
-----------------------------7e030c24904a2
Content-Disposition: form-data; name="key"

....тут_ключ.....
-----------------------------7e030c24904a2
Content-Disposition: form-data; name="file"; filename="G:\Autoit\rucapcha\123.jpg"
Content-Type: image/jpeg

яШяа

........тут дальше какие-то кракозябры, которые не вставляются здесь.........

Видно, что картинка идет в разных форматах.
Видно, что Content-Length: 3586 у эксплорера правильный, а у нас в AutoIt: Content-Length: 6641

Пробовал читать файл как бинарный с открытием хендлера:
Код:
;~~~ читаем файл капчи
  Local $h_File = FileOpen($pathFile, 256)
  Local $binFile = FileRead($h_File)

вид запроса стал более похож на эксплореровский, но всеравно картинка приходит на РуКапчу битая (не в том формате).
В общем, jpg файл как-то не так читается/кодируется при передаче на сервер.
Кто знает в чем может быть дело?
 

Arphey

Новичок
Сообщения
2
Репутация
1
У меня та же проблема, никто не решил как пофиксить скрипт?

Исправил функцию

Код:
Func __antigatecom_upload($apiKey, $pathFile)

  ;~~~ проверка существования файла
  If Not FileExists($pathFile) Then
    If $_DEBUG Then ConsoleWrite('--> файл "' & $pathFile & '" не найден' & @LF)
    SetError(1)
    Return 'ERROR_FILE_NOT_FOUND'
  EndIf

  ;~~~ читаем файл капчи
  Local $binFile = FileRead($pathFile)
  If @error Then
    If $_DEBUG Then ConsoleWrite('--> невозможно прочитать файл "' & $pathFile & '"' & @LF)
    SetError(2)
    Return 'ERROR_FILE_NOT_READ'
  EndIf

;~    _Encoding_URLToHex(
  ;~~~ определяем тип файла
  Local $ext = StringSplit($pathFile, '.')
  $ext = $ext[$ext[0]]
  Local $ContentType
  Switch $ext
    Case 'jpg'
      $ContentType = 'image/jpeg'
    Case 'gif'
      $ContentType = 'image/gif'
    Case 'png'
      $ContentType = 'image/png'
    Case Else
      If $_DEBUG Then ConsoleWrite('--> не поддерживаемый формат изображения "' & $ext & '"' & @LF)
      SetError(3)
      Return 'ERROR_IMAGE_TYPE_NOT_SUPPORT'
  EndSwitch

  ;~~~ собираем тело пакета
  Local $boundary = '----AFnIn7z0bMWeTdpy' ; задаём разделитель данных в HTTP запросе
  Local $content = '--$boundary' & @LF
  $content &= 'Content-Disposition: form-data; name="method"' & @LF & @LF
  $content &= 'post' & @LF ; метод передачи данных
  $content &= '--' & $boundary & @LF
  $content &= 'Content-Disposition: form-data; name="key"' & @LF & @LF
  $content &= $apiKey & @LF ; ключ
  ;$content &= '--' & $boundary & @LF
  ;$content &= 'Content-Disposition: form-data; name="regsense"' & @LF & @LF
  ;$content &= '1' & @LF ; с учетом регистра
  $content &= '--' & $boundary & @LF
  $content &= 'Content-Disposition: form-data; name="file"; filename="captcha.' & $ext & '"' & @LF
  $content &= 'Content-Type: ' & $ContentType & @LF & @LF
  $content &= BinaryToString($binFile) & @LF ; содержимое ФАЙЛА капчи, БЕЗ какого либо кодирования, целиком
  $content &= '--' & $boundary & '--'

  ;~~~ отправка капчи
  Local $oWinHttp = ObjCreate('WinHttp.WinHttpRequest.5.1') ; создаём COM-объект
  With $oWinHttp
    .Open('POST', 'http://rucaptcha.com/in.php', 0) ; создаём соеденение, указываем адрес страницы
    .SetRequestHeader('Content-Type', 'multipart/form-data; boundary=' & $boundary) ; тип отправляемого запроса
	.SetRequestHeader('Accept-Encoding: gzip, deflate')
    .SetRequestHeader('Content-Length', StringLen($binFile)) ; длина запроса
;~     .Send($content, 1) ; отправляем запрос
	 .Send(StringToBinary($content, 1)) ; отправляем запрос
    Local $sResp = .ResponseText ; получаем ответ
  EndWith
ConsoleWrite($content)
  ;~~~ разбираем ответ отправки
  Dim $idCapcha = StringSplit($sResp, '|') ; парсим ответ
  If $idCapcha[1] = 'OK' Then
    $idCapcha = $idCapcha[2]
    If $_DEBUG Then ConsoleWrite('--> id капчи: ' & $idCapcha & @LF)
    Return $idCapcha
  Else
    Local $sOut = __antigatecom_error($sResp)
    If $_DEBUG Then ConsoleWrite('--> сервер вернул ошибку: ' & $sOut & @LF)
    SetError(4)
    Return $sOut
  EndIf

EndFunc ;==> __antigatecom_upload


все теперь все работает
 
Верх