Начал разработку UDF для работы с anticaptcha сервисами...
Для "общения" с сервисом использую WinHttp.WinHttpRequest
Как известно подобные сервисы ловят данные через multipart/form-data:
И всё бы хорошо но никак не могу передать картинку, а именно
Пробовал как просто FileRead, так и _Base64Encode.
Принимает все параметры кроме самой картинки :(
У сообщества есть соображения?
Для "общения" с сервисом использую WinHttp.WinHttpRequest
Как известно подобные сервисы ловят данные через multipart/form-data:
Что такое кодировка multipart/form-data?
Как вы знаете, в обычном POST-запросе все параметры передаются в одной строке ( param1=value1¶m2=value2& ... итд.). Наряду с этим существует еще один способ, повсеместно используемый для отправки файла через веб-форму. Данные здесь уже не кодируются в urlencode а отправляются как есть, разграниченные специальными разделителями, которые вы сами генерируете и указываете в заголовке (официальная спецификация RFC1867). Вот пример, как выглядел бы ваш запрос отсылки капчи:
Код:POST http://anti-captcha.com/in.php HTTP/1.0 Content-Type: multipart/form-data; boundary=*BBBBBB* Host: anti-captcha.com Content-Length: *XXXXXX* --*BBBBBB* Content-Disposition: form-data; name="method" post --*BBBBBB* Content-Disposition: form-data; name="key" 41f4d6c342bcad57b6260e64f6a50619 --*BBBBBB* Content-Disposition: form-data; name="file"; filename="capcha.jpg" Content-Type: image/pjpeg *CCCCCC* --*BBBBBB*--
Где:
*BBBBBB* - разделитель, который должен быть достаточно уникальным (чтобы не повториться случайно в других данных).
Пример: -------------b358fdj4ha19fdk
Обратите внимание на то, как в примере разделитель используется с 2мя дефисами спереди каждый раз перед указыванием нового параметра и с 2мя дефисами спереди и в конце запроса.
*CCCCCC* - содержимое ФАЙЛА капчи, БЕЗ какого либо кодирования, целиком.
*XXXXXX* - длина содержимого POST-запроса в байтах, начиная от первого разделителя --*BBBBBB* до последнего --*BBBBBB*-- ВКЛЮЧАЯ ОБА. Т.е. предварительно нужно собрать содержимое запроса в памяти, посчитать его длину и уже потом формировать окончательный запрос.
PS. Соответственно если вы шлете не JPG а, скажем, GIF, то Content-Type должен быть не image/pjpeg, а image/gif. То же самое для формата PNG - image/png
И всё бы хорошо но никак не могу передать картинку, а именно
*CCCCCC* - содержимое ФАЙЛА капчи, БЕЗ какого либо кодирования, целиком
Пробовал как просто FileRead, так и _Base64Encode.
Принимает все параметры кроме самой картинки :(
У сообщества есть соображения?