Что нового

[Сеть, интернет] Загрузка капчи

Rivald

Новичок
Сообщения
61
Репутация
1
Собственно, нужно зарегистрироваться на сайте с капчей.
Накидал код, но появилась проблема, скачивать капчу нужно с куками, тоесть InetGet отпадает.
Вот код загрузки:
Код:
Func getimage()
;$header = "GET /kcaptcha/?PHPSESSID=" & $cookie & " HTTP/1.1" & @CRLF
;$header &= "Host: serv.pw-fabled.com" & @CRLF
;$header &= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0" & @CRLF
;$header &= "Accept: image/png,image/*;q=0.8,*/*;q=0.5" & @CRLF
;$header &= "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3" & @CRLF
;$header &= "Referer: http://serv.pw-fabled.com/register.php" & @CRLF
;$header &= "Cookie: PHPSESSID=" & $cookie & @CRLF
;$header &= "Connection: keep-alive" & @CRLF & @CRLF
;TCPSend($connect, $header)
;Sleep(1000)
;$recv = TCPRecv($connect, 5000)
;Sleep(1000)

$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://serv.pw-fabled.com/kcaptcha/?PHPSESSID=" & $cookie)
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader("Accept", "image/png,image/*;q=0.8,*/*;q=0.5")
$oHTTP.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
$oHTTP.SetRequestHeader("Referer","http://serv.pw-fabled.com/register.php")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
$oHTTP.SetRequestHeader("Cookie", "PHPSESSID=" & $cookie)
$oHTTP.SetRequestHeader("Host","serv.pw-fabled.com")
$oHTTP.SetRequestHeader("Connection","keep-alive")
$oHTTP.Send("")
$oHTTP.WaitForResponse
If @error Then
   Return 0
EndIf
$recv = $oHTTP.Responsetext
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $recv = ' & $recv & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
EndFunc


В первом закомментированном варианте приходит 1\3 картинки, во втором ничего. Все данные, которые вставлены в запросы получены сниффером, то-есть должны быть валидны.
Ох чувствую, щас убивать меня будут, за повторяющуюся тему, но если можно, скажите решение без IE либы.
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
Rivald

Код:
;$recv = TCPRecv($connect, 5000)

5000 замени на число побольше всётаки от него зависит лимит сколько ты примешь данных
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Rivald [?]
Собственно, нужно зарегистрироваться на сайте с капчей.
Это пример!
Автоматизацию (условия, функции, анализ данных и т.д.), это сами. :smile:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#Region Variable
Local $sLogin		= 'my_login'
Local $sPasswd		= 'my_passw'
Local $sRePasswd	= 'my_passw'
Local $sEmail		= '[email protected]'

Local $sUrl			= 'http://serv.pw-fabled.com/register.php'
Local $sCookie		= ''
#EndRegion Variable

Global $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")

$oHTTP.Open("GET", $sUrl)
$oHTTP.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
$oHTTP.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4")
$oHTTP.SetRequestHeader("Cache-Control","max-age=0")
$oHTTP.SetRequestHeader("Connection","keep-alive")
$oHTTP.SetRequestHeader("Host","serv.pw-fabled.com")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36")

$oHTTP.Send("")
$oHTTP.WaitForResponse

$sCookie = StringFormat('%s\n', StringRegExpReplace($oHTTP.GetResponseHeader("Set-Cookie"), '(PHPSESSID=.*?);.*', '$1'))

$oHTTP.Open("GET", StringFormat("http://serv.pw-fabled.com/kcaptcha/?%s", $sCookie))
$oHTTP.SetRequestHeader("Accept", "image/webp,*/*;q=0.8")
$oHTTP.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4")
$oHTTP.SetRequestHeader("Cache-Control","max-age=0")
$oHTTP.SetRequestHeader("Connection","keep-alive")
$oHTTP.SetRequestHeader("Cookie", $sCookie)
$oHTTP.SetRequestHeader("Host","serv.pw-fabled.com")
$oHTTP.SetRequestHeader("Referer", $sUrl)
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36")

$oHTTP.Send("")
$oHTTP.WaitForResponse

$hFile = FileOpen(@ScriptDir & "\captcha.jpg", 18)
FileWrite($hFile, $oHTTP.ResponseBody)
FileClose($hFile)

#Region Form
$Form1 = GUICreate("1", 136, 160, -1, -1)
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\captcha.jpg", 8, 8, 120, 72)
$Button1 = GUICtrlCreateButton("Send", 31, 122, 75, 25)
$Input1 = GUICtrlCreateInput("", 8, 88, 121, 21)
GUISetState(@SW_SHOW)
#EndRegion Form

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$sKeystring = GUICtrlRead($Input1)
			ExitLoop
	EndSwitch
 WEnd

GUIDelete($Form1)

$sData = _URLEncode(StringFormat("login=%s&passwd=%s&repasswd=%s&email=%s&keystring=%s&submit=%s", $sLogin, $sPasswd, $sRePasswd, $sEmail, $sKeystring, "Готово"))

$oHTTP.Open("POST", $sUrl)
$oHTTP.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
$oHTTP.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4")
$oHTTP.SetRequestHeader("Cache-Control","max-age=0")
$oHTTP.SetRequestHeader("Connection","keep-alive")
$oHTTP.SetRequestHeader("Content-Length", StringLen($sData))
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.SetRequestHeader("Cookie", $sCookie)
$oHTTP.SetRequestHeader("Host","serv.pw-fabled.com")
$oHTTP.SetRequestHeader("Origin","http://serv.pw-fabled.com")
$oHTTP.SetRequestHeader("Referer", $sUrl)
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36")

$oHTTP.Send($sData)
$oHTTP.WaitForResponse

$o_HtmlFile = ObjCreate('htmlfile')
If Not IsObj($o_HtmlFile) Then Return SetError(2)
$o_HtmlFile.open
$o_HtmlFile.write(BinaryToString($oHTTP.ResponseBody))
$o_HtmlFile.close

$oBR = $o_HtmlFile.all
For $i = 42 To $oBR.length
   ConsoleWrite( $oBR.item($i).InnerText )
   ConsoleWrite($oBR.item($i).nextSibling.ToString)
Next

Func _URLEncode($s_Url)

	$s_Tmp = $s_Url
	$o_MatchCollection = StringRegExp($s_Url, "[^a-zA-Z0-9\&\?\.\:=\/\+-]", 3)
	For $o_Match In $o_MatchCollection

		$i_Asc = Hex(StringToBinary($o_Match, 4))
		If BinaryLen($i_Asc) = 4 Then ; русские буквы
			$s_Tmp = StringReplace($s_Tmp, $o_Match, StringRegExpReplace($i_Asc, '(\w{2})', '%$1'))
		Else
			$s_Tmp = StringReplace($s_Tmp, $o_Match, "%" & $i_Asc)
		EndIf
	Next

	Return $s_Tmp
 EndFunc ;==>_URLEncode
 
Верх