Здравствуйте.
Как в папку сохранить капчу?
Пытаюсь страницу сохранить из примера, не сохраняет.В чём ошибка?
Нашёл код Post запроса,хтмл страницу скачивает,но не реагирует на сайт freebitco.in
И внизу страницы Get запрос,код принимает хтмл,но не на freebitco.in.И не удаётся получить ip-адрес сервера.
На форуме почитал,что после первого запроса в шапке html должны появиться куки от сайта,с которыми можно потом капчу скачать.Какой запрос лучше в данном случае??
Нашёл пример получения куков и обработка нужной части:
Ниже часть с циклом куки не показывает,пока пытаюсь их сохранить.
В целом первый запрос GET сделал,куки получил,второй запрос GET с куками на капчу вызывает ошибку.
На странице капча выглядит так:
<div class="captchasnet_captcha_content">
<img src="//captchas.freebitco.in/botdetect/e/live/index.php?random=OlBaDFtOH9EX9VxbAlthhlb6aMD02yAE" onerror="GenerateCaptchasNetCaptcha('botdetect_signup_captcha', 3, 'OlBaDFtOH9EX9VxbAlthhlb6aMD02yAE');">
На форумах прочитал,что с первым GET запросом можно сразу и куки ,и капчу получить.А со вторым POST отправить данные.Как капчу вытащить? или полностью html страницу?
Через F12 просмотр кода, ссылка на капчу есть captchas.freebitco.in/botdetect/e/live/index.php?random=OlBaDFtOH9EX9VxbAlthhlb6aMD02yAE.jpeg
А в хтмл коде её нет.
Думал может шифруется в base64, тоже в коде нет.
Или в тегах <div class="captchasnet_captcha_content"></div> первый запрос GET сделать?
Как в папку сохранить капчу?
Код:
InetGet("http://www.mozilla.org", @TempDir & "\mozilla.html")
InetGet("http://www.autoitscript.com", @TempDir & "autoitscript.html", 1)
InetGet("ftp://ftp.mozilla.org/pub/mozilla.org/README", @TempDir & "\Mozilla-README.txt", 1)
; Улучшенный пример - скачивание в фоновом режиме
Local $hDownload = InetGet("https://freebitco.in/?op=signup_page", @TempDir & "C:\Users\user\Desktop\post\", 1, 1)
Do
Sleep(250)
Until InetGetInfo($hDownload, 2) ; Проверка завершения загрузки
Local $nBytes = InetGetInfo($hDownload, 0)
InetClose($hDownload) ; Закрыть дескриптор, чтобы освободить ресурсы.
MsgBox(4096, "", "Количество прочитанных байт: " & $nBytes)
Пытаюсь страницу сохранить из примера, не сохраняет.В чём ошибка?
Код:
#include <Inet.au3>
ConsoleWrite(_INetGetSource('http://www.google.com'))
Нашёл код Post запроса,хтмл страницу скачивает,но не реагирует на сайт freebitco.in
Код:
$sEmail="345"
$sPass="345"
$url="http://smart-lab.ru/login/"
Func login()
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
;Отправляем POST запрос
$oHTTP.Open("POST",$url)
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
$oHTTP.SetRequestHeader("Accept-Language", "ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3")
$oHTTP.SetRequestHeader("Referer","http://smart-lab.ru")
$oHTTP.SetRequestHeader("Content-Type","text/html; charset=utf-8")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0")
$oHTTP.SetRequestHeader("Host","smart-lab.ru")
$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
;Передаем логин-пароль
$oHTTP.Send('login='&$sEmail&'&password='&$sPass)
$oHTTP.WaitForResponse
$resp=$oHTTP.ResponseText
;вывожу ответ сервера в файл
FileWrite("C:\Users\имя\Desktop\console.html", $resp)
EndFunc
login()
И внизу страницы Get запрос,код принимает хтмл,но не на freebitco.in.И не удаётся получить ip-адрес сервера.
Код:
#include <IE.au3>
#include <Array.au3>
$sDomain = 'www.bwc.ru' ;домен или ip-адрес
$iPort = 80 ;порт
;Запрос, который будет отправлен серверу
$sRequest = 'GET /cgi-bin/smssend.cgi HTTP/1.1' & @CRLF ;Request-строка, параметры GET-запроса
$sRequest &= 'Host: www.bwc.ru' & @CRLF
$sRequest &= 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1' & @CRLF
$sRequest &= 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' & @CRLF
$sRequest &= 'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3' & @CRLF
$sRequest &= 'Accept-Encoding: gzip, deflate' & @CRLF
$sRequest &= 'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7' & @CRLF
$sRequest &= 'Keep-Alive: 115' & @CRLF
$sRequest &= 'Connection: keep-alive' & @CRLF & @CRLF
If TCPStartup() = 0 Then ;запускаем TCP/UDP-службы
MsgBox(16, 'Ошибка', 'Не удалось запустить TCP/UDP-службы.')
Exit 1
EndIf
$sIP = TCPNameToIP($sDomain) ;получаем ip-адрес
If @error Then
MsgBox(16, 'Ошибка', 'Не удалось получить ip-адрес сервера.')
Exit 2
EndIf
$iSocket = TCPConnect($sIP, $iPort) ;соединяемся с сервером
If @error Then
; MsgBox(16, 'Ошибка', 'Не удалось соедениться с сервером.')
Exit 3
EndIf
TCPSend($iSocket, $sRequest) ;отправляем сообщение
If @error Then
MsgBox(16, 'Ошибка', 'Не удалось отправить запрос.')
Exit 4
EndIf
$sData = ''
$iTimer = TimerInit() ;запускаем таймер
Do
$sBuffer = TCPRecv($iSocket, 1024) ;получаем часть сообщения сервера
$iError = @error
If Not $sBuffer = '' Then ;если удалось получить сообщение
$sData &= $sBuffer ;сохраняем полученное сообщение
$iTimer = TimerInit() ;обнуляем таймер
EndIf
Until $iError <> 0 Or TimerDiff($iTimer) > 5000 ;если при получении сообщения произошла ошибка (данные получены, соединение закрыто) или в течении 5 секунд ничего не было получено, выход из цикла
TCPCloseSocket($iSocket)
TCPShutdown()
$aData = StringRegExp($sData, '(?s)(.*?)\r\n\r\n(.*)', 3) ;отделяем http-заголовки от тела сообщения ('заголовки' & @CRLF & @CRLF & 'тело')
If @error Then
MsgBox(16, 'Ошибка', 'Полученные данные неверны.')
Exit 5
EndIf
$fileo = FileOpen("C:\Users\имя\Desktop\Текстовый документ.txt",2)
$filew = FileWrite("C:\Users\имя\Desktop\Текстовый документ.txt", $aData[1])
$filec = FileClose("C:\Users\имя\Desktop\Текстовый документ.txt")
MsgBox(1,"", $aData[1])
;...
TCPCloseSocket($iSocket)
TCPShutdown()
;$aData = StringRegExp($sData, '(?s)(.*?)\r\n\r\n(.*)', 3) ;отделяем http-заголовки от тела сообщения ('заголовки' & @CRLF & @CRLF & 'тело')
;If @error Then
; MsgBox(16, 'Ошибка', 'Полученные данные неверны.')
; Exit 5
;EndIf
$sUrl = StringRegExpReplace($sData, '(?si).*?id="code_img.*?src="(.*?)"\s?/>.*', 'http://bwc.ru/cgi-bin/$1')
ConsoleWrite($sUrl & @LF)
InetGet($sUrl, @ScriptDir & 'C:\Users\имя\Desktop\img.png')
На форуме почитал,что после первого запроса в шапке html должны появиться куки от сайта,с которыми можно потом капчу скачать.Какой запрос лучше в данном случае??
Нашёл пример получения куков и обработка нужной части:
Код:
;ссылка источника https://beamtic.com/setting-http-request-headers-autoit
#include <IE.au3>
#include <Array.au3>
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", "http://beamtic.com/", False)
$oHTTP.SetRequestHeader("User-Agent", "User-Agent=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0")
$oHTTP.SetRequestHeader("Referer", "http://beamtic.com/")
$oHTTP.Send()
$HeaderResponses = $oHTTP.GetAllResponseHeaders()
$resp=$oHTTP.ResponseText
;вывожу ответ сервера в файл
FileWrite("C:\Users\имя\Desktop\console.html", $resp)
; Обрабатывать Cookies
$array = StringRegExp($HeaderResponses, 'Set-Cookie: (.+)\r\n', 3)
$cookies = ''
;запишем куки в файл
Sleep(1000)
FileWriteLine("C:\Users\имя\Desktop\kuki.txt", $HeaderResponses)
for $i = 0 to UBound($array) - 1
; Добавьте все куки в одну строку, а затем очистите ее.
$cookies = $array[$i] & ';'
; Получение имени текущего
$cookname = StringRegExpReplace($cookies, "([^=]+)=.+", "$1")
;Удаление частей, которые мы не используем ..
$cookies = StringRegExpReplace($cookies, "( path| domain| expires)=[^;]+", "")
$cookies = StringRegExpReplace($cookies, " HttpOnly", "")
$cookies = StringRegExpReplace($cookies, "[;]{2,}", ";")
; Сохраните куки в .txt файлы
; Удалите файл , если он уже существует
FileDelete ("Cookies\" & $cookname & ".txt")
$file = FileOpen("Cookies\" & $cookname & ".txt", 1)
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file: " & $cookname)
Exit
EndIf
FileWrite($file, $cookies)
FileClose($file)
Next
В целом первый запрос GET сделал,куки получил,второй запрос GET с куками на капчу вызывает ошибку.
На странице капча выглядит так:
<div class="captchasnet_captcha_content">
<img src="//captchas.freebitco.in/botdetect/e/live/index.php?random=OlBaDFtOH9EX9VxbAlthhlb6aMD02yAE" onerror="GenerateCaptchasNetCaptcha('botdetect_signup_captcha', 3, 'OlBaDFtOH9EX9VxbAlthhlb6aMD02yAE');">
Код:
#include <IE.au3>
#include <Array.au3>
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", "https://freebitco.in/?op=signup_page", False); гет запрос на данные
$oHTTP.SetRequestHeader("User-Agent", "User-Agent=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0")
$oHTTP.SetRequestHeader("Referer", "https://freebitco.in/?op=signup_page")
$oHTTP.Send(); отправляем данные и делаем запрос на куки
$HeaderResponses = $oHTTP.GetAllResponseHeaders()
$resp=$oHTTP.ResponseText
;вывожу ответ сервера в файл браузера
FileWrite("C:\User\имя\Desktop\console.html", $resp); получаем html страницу
;запишем куки в файл
Sleep(1000)
FileWriteLine("C:\Users\имя\Desktop\kuki.txt", $HeaderResponses); получаем куки
Sleep(1000)
$oHTTP.Open('GET', 'https://freebitco.in/?op=signup_page') ; делаем запрос с куками на картинку капчи
$oHTTP.SetRequestHeader('', $HeaderResponses) ; вставляем в отправку куки здесь ошибка 24 линия
$oHTTP.Send() ; передаем данные
$oHTTP.WaitForResponse
$resp2 = $oHTTP.ResponseText
$HeaderResponses2 = $oHTTP.GetAllResponseHeaders()
;вывожу ответ сервера в файл браузера
FileWrite("C:\Users\имя\Desktop\console2.html", $resp2); получаем хтмл страницу
;запишем куки в файл
Sleep(1000)
FileWriteLine("C:\Users\имя\Desktop\kuki2.txt", $HeaderResponses2); смотрим что куки теже
На форумах прочитал,что с первым GET запросом можно сразу и куки ,и капчу получить.А со вторым POST отправить данные.Как капчу вытащить? или полностью html страницу?
Через F12 просмотр кода, ссылка на капчу есть captchas.freebitco.in/botdetect/e/live/index.php?random=OlBaDFtOH9EX9VxbAlthhlb6aMD02yAE.jpeg
А в хтмл коде её нет.
Думал может шифруется в base64, тоже в коде нет.
Или в тегах <div class="captchasnet_captcha_content"></div> первый запрос GET сделать?