1

Тема: AHK: Не работает скрипт отправки картинки сайт

Здравствуйте! Помогите доделать скрипт. Делаю скрипт для отправки картинки капчи на сайт для автоматического распознания. Но картинки до сайта не доходит, это видно из статистики сайта.
В общем код выглядит следующим образом:

 URL := "http://rucaptcha.com/in.php"
Data2 := "key=KEY"
Data1 := "coupon_5-25.jpg"
Data3 := "method=post"
WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("POST", URL, true)
WebRequest.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
WebRequest.SetRequestHeader("enctype", "multipart/form-data")
WebRequest.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.0.10)")
Data = %Data3%&%Data2%&%Data1%
WebRequest.Send(Data)

MsgBox, % WinHttpRequest.GetAllResponseHeaders() "Status: " WinHttpreq.Status "`n" WinHttpReq.StatusText

MsgBox, % WebRequest.StatusText
MsgBox, % WebRequest.getAllResponseHeaders()
MsgBox %data% 

Инструкция по отправке картинки на сайт - https://rucaptcha.com/api-rucaptcha#sol … al_captcha

2

Re: AHK: Не работает скрипт отправки картинки сайт

Нашел пример где сказано, что нужно сделать строчку разделения, разделитель (Boundary ) и двоичное содержимое файла.
Только вот как правильно сделать пустую строку и потом открыть двоичное содержимое файла не понятно. Может кто знает как это сделать на AHK, помогите с этим.

--Asrf456BGe4h
Content-Disposition: form-data; name="AttachedFile1"; filename="horror-photo-1.jpg"
Content-Type: image/jpeg
(пустая строка)
(двоичное содержимое  фотографии)

3

Re: AHK: Не работает скрипт отправки картинки сайт

Вот пример, где использован multipart/form-data:
http://forum.script-coding.com/viewtopic.php?id=13605
Но вам, судя по их апи, можно залить картинку просто закодировав её в base64.

4

Re: AHK: Не работает скрипт отправки картинки сайт

Malcev я пробовал отправлять в формате base64, но от сайта получал ответ, что неправильный формат файла. Для закодирован я использовал сайт который через поиск нашел. А вот для AHK не нашел скрипты для перекодирования, так что решил выбрать метод отправки формы

5

Re: AHK: Не работает скрипт отправки картинки сайт

Вот так можно в base64 кодировать:
http://forum.script-coding.com/viewtopic.php?id=13256

6

Re: AHK: Не работает скрипт отправки картинки сайт

Malcev

Почему то все так же не получается. Причем не получается первая часть даже. Первое, что проверяет сервер так это правильность ключа. Хоть он и правильный приходит ответ, что ошибка ключа. Видать как то не так отправляются данные.
Пробовал по примеру (первая ссылка по отправки файла на сайт) переделать но не получилось, пробовал переделать по примеру который нашел на скрипте Autoit в нем рабочий код выглядит следующим образом:

   ;~~~ собираем тело пакета
  Local $boundary = '----AFnIn7z0bMWeTdpy' ; задаём разделитель данных в HTTP запросе

  Local $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 
  ;$content &= BinaryToString($binFile) ; содержимое ФАЙЛА капчи, БЕЗ какого либо кодирования, целиком

  ;~~~ отправка капчи

  With ObjCreate('WinHttp.WinHttpRequest.5.1')
    .Open('POST', 'http://rucaptcha.com/in.php', 0) ; создаём соеденение, указываем адрес страницы
    .SetRequestHeader('Content-Type', 'multipart/form-data; boundary=----AFnIn7z0bMWeTdpy') ; тип отправляемого запроса
     .Send(StringToBinary($content, 1)) ; отправляем запрос

Те строки которые закоментированные используется для отправки файла картинки. Без него проходит проверка ключа на сервере рукапчи.


Я писал следующий код на AHK:

 b := "qqqqq"
WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("post", URL, false)
WebRequest.SetRequestHeader("Content-Type", "multipart/form-data; boundary=qqqqq")

str = Content-Disposition: form-data; name="method"`n`r`n`r
			post`n`r
			--%b%`n`r
			Content-Disposition: form-data; name="key"`n`r`n`r
			(код ключа)
WebRequest.Send(str)

в чем может быть ошибка?

так же пробовал запускать скрипт для перекодирования картинки в формат Base64 (вторая ссылка которую Вы скидывали)
вылазит ошибка в строках 

SendImageToImgur(imagePath, ClientID, JpegQuality := "")  {


и

StateChange(http)  {

в чем причина выяснить не удалось.

7

Re: AHK: Не работает скрипт отправки картинки сайт

   oFile := FileOpen(imagePath, "r")
   oFile.Pos := 0
   oFile.RawRead(buff, size := oFile.length)
   oFile.Close()
   strBase64 := CryptBinaryToStringBASE64(&buff, size, true)

CryptBinaryToStringBASE64(pData, Bytes, NOCRLF = "")  {
   static CRYPT_STRING_BASE64 := 1, CRYPT_STRING_NOCRLF := 0x40000000
   CRYPT := CRYPT_STRING_BASE64 | (NOCRLF ? CRYPT_STRING_NOCRLF : 0)
   
   DllCall("Crypt32\CryptBinaryToString", Ptr, pData, UInt, Bytes, UInt, CRYPT, Ptr, 0, UIntP, Chars)
   VarSetCapacity(OutData, Chars * (A_IsUnicode ? 2 : 1))
   DllCall("Crypt32\CryptBinaryToString", Ptr, pData, UInt, Bytes, UInt, CRYPT, Str, OutData, UIntP, Chars)
   Return OutData
}

8

Re: AHK: Не работает скрипт отправки картинки сайт

Malcev а есть какие то ограничения для открывания и перекодирования файлов картинок? я сделал форму для отправки и передаю эту закодированную картинку, до сайта все доходит, но показывает, что картинка пустая. подозреваю, что либо разрешение картинки маленькое или типа картинки не поддерживается (пробовал jpg, png, gif, эффект одинаковый - пустая картинка)

9

Re: AHK: Не работает скрипт отправки картинки сайт

Malcev все разобрался, все заработало, спасибо!