Войти

Показать полную графическую версию : Получение содержимого картинки через tcp


malev
08-09-2009, 14:23
Подскажите как это реализовывается, как мне сказали знающие люди полученные данные зачем то кодируются в 16-чную систему, а оно мне не надо надо будет сохранить в файл а потом отобразить на форме. InetGet не подойдет так как картинка - каптча код.

$sHost2 = "ya.ru"
$sPage="/"

msgbox (0,"привет",_HTTPGetHeader($sHost2))

Func _HTTPGetHeader($sHost)
TCPStartup()
Local $sName_To_IP = TCPNameToIP($sHost)
Local $iSocket = TCPConnect($sName_To_IP, 80)
If $iSocket = -1 Then
TCPCloseSocket($iSocket)

Return SetError(1, 0, "")
EndIf
Local $sCommand = "GET /logo.png HTTP/1.0" & @CRLF
$sCommand &= "Host: " & $sHost2 & @CRLF & @CRLF

ConsoleWrite ($sCommand)
Local $BytesSent = TCPSend($iSocket, $sCommand)
If $BytesSent = 0 Then Return SetError(2, @error, 0)

Local $sRecv = "", $sCurrentRecv
While 1
$sCurrentRecv = TCPRecv($iSocket, 16)
If @error <> 0 Then ExitLoop
If $sCurrentRecv <> "" Then $sRecv &= $sCurrentRecv
WEnd
ConsoleWrite ($sRecv)

TCPCloseSocket($iSocket)
TCPShutdown()
Return $sRecv
EndFunc

Вот пример без каптчи, но все равно код картинки должен начинаться с "%PNG"

Alex2103
08-09-2009, 22:31
нужно отбросить хидеры отданые сервером и записать все остальное в файл... Вообще непонятно для чего все это? Свой браузер пишем? :)

malev
09-09-2009, 11:05
я же написал каптча код отобразить, может есть другой способ, вроде тут описывался метод через скриншот, но мне так не подходит - ненадежно. Хидеры отданные сервером - это что как их распознать?

Alex2103
09-09-2009, 11:27
malev, а если так? непонятно почему InetGet не подойдет...

#include <INet.au3>
InetGet("http://ya.ru/logo.png", "C:\logo.png")

malev
09-09-2009, 18:40
http://webmaster.yandex.ru/ напиши тогда код получения следующей цифровой картинки (
Защита от автоматических регистраций)

kaster
09-09-2009, 19:13
malev,
InetGet('http://captcha.yandex.net/image?key=f9b73ae5d3f0714529c621b66f0d92a9', 'd:\1.jpg')
получить эту урлу думаешь сможешь сам ;)
PS: имеется в виду, первый InetGet для полученя урлы, второй InetGet для получения картинки...

Вот набросал. Поиск строки можно реализовать намного проще через Рег.Выражения. Но я в них не силен.

#include <Array.au3>
InetGet('http://webmaster.yandex.ru/', 'd:\1.url')
$hFile = FileOpen('d:\1.url', 0)
While 1
$sCaptcha = FileReadLine($hfile)
If StringInStr($sCaptcha, 'http://captcha.yandex.net') Then
$aCaptcha = StringSplit($sCaptcha, '"')
;_ArrayDisplay($aCaptcha)
For $i = 1 to $aCaptcha[0]
If StringInStr($aCaptcha[$i], 'http://captcha.yandex.net') Then $sURL = $aCaptcha[$i]
Next
ExitLoop
EndIf
WEnd
InetGet($sURL, 'd:\1.jpg')
ShellExecute('d:\1.jpg')

malev
10-09-2009, 19:49
Как проверю так отпишусь. дело в том что нужно чтобы сайт еще и принял картинку а у меня пока код не готов, немного другие функции реализую.




© OSzone.net 2001-2012