Что нового

Как скачать картинку GET запрсом?

Mihail10

Новичок
Сообщения
18
Репутация
0
Здравствуйте.

Как в папку сохранить капчу?
Код:
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 сделать?
 
Автор
M

Mihail10

Новичок
Сообщения
18
Репутация
0
Как часть элемента со страницы взять?
$oHTTP.SetRequestHeader("Referer", '<div class="captchasnet_captcha_content"><div>')
$oHTTP.SetRequestHeader("Content-Type", "multipart/form-data; ")
 
Верх