Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Получение содержимого картинки через tcp (http://forum.oszone.net/showthread.php?t=150020)

malev 08-09-2009 14:23 1214054

Получение содержимого картинки через tcp
 
Подскажите как это реализовывается, как мне сказали знающие люди полученные данные зачем то кодируются в 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 1214370

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

malev 09-09-2009 11:05 1214645

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

Alex2103 09-09-2009 11:27 1214672

malev, а если так? непонятно почему InetGet не подойдет...
Код:

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


malev 09-09-2009 18:40 1215025

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

kaster 09-09-2009 19:13 1215045

malev,
HTML код:

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 1215996

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


Время: 18:05.

Время: 18:05.
© OSzone.net 2001-