Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как получить картинку методом Get запросов

Ответить
Настройки темы
Как получить картинку методом Get запросов

Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


Объясните кто знает как получить картинку методом отправки Get запросов, InetGet - не интересует. Сам пробовал не получается. Вот что настрадалось на текущий момент:
Код: Выделить весь код
#include <HTTP.au3>

 $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
;~ ****1 метод******
$Sock=_HTTPConnect($sHost2)
ConsoleWrite(_HTTPGet($sHost2,"logo.png") & @CR)
$aRes=_HTTPRead($Sock,0)
ConsoleWrite($aRes & @CR & "***********************" & @CR)
_HTTPClose()
;~ ****2 метод******
_HTTPGetHeader($sHost2)
2- ой метод более похож на правду но данные почему то начинаются неправильно должно быть PNG%
Библиотека HTTP.au3 - http://forum.oszone.net/thread-154449.html

Отправлено: 15:36, 28-10-2009

 

Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


Попробовал уменьшит параметр в функции TCPRecv($iSocket, 16) с 16 до 1 появился заголовок %PNG но все равно встречается мусор типа - 0x000x000x00

Отправлено: 13:34, 30-10-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата malev:
но все равно встречается мусор типа - 0x000x000x00 »
Это не мусор. "0x00" - это hex представление "знака или символа" Nul. Если например открыть это изображение (предварительно его сохранив из сайта, как *.png) в SciTE, то можно увидеть как этот символ отображается, типа NUL в чорном квадратике. Плохо то, что этот символ нельзя ни копировать, ни конвертировать, чтоб заменить в нашем случае 0x00 на Nul, ибо если просто заменить на 00, то ничего не совпадет, ибо 0 в hex отображении будет иметь значение 30, а нужно, чтобы в hex отображении было именно 00.Единственное что можно сделать в этом случае, это загрузить код этого рисунка, с помощью описанной функции _HTTPGetHeader($sHost), изменив код в соответствующем месте, на:
Код: Выделить весь код
 $sCurrentRecv = TCPRecv($iSocket, 1)
        If @error <> 0 Then ExitLoop
        If $sCurrentRecv <> "" Then 
            If  $sCurrentRecv ="0x00" Then  
                $sRecv &= "1_2_3_4_5" ; заменяем, чтоб можно было тогда найти в бинарном виде, именно это.
            Else
            $sRecv &= $sCurrentRecv
            EndIf
Потом сохраняем только код самого рисунка в некий файл. После чего открываем этот файл в бинарном режиме для чтения и дальше, например так:
Код: Выделить весь код
$BinnaryData=StringReplace ( $BinnaryData, "315F325F335F345F35", "00") ; заменяем "1_2_3_4_5", которое в бинарном виде выглядит как "315F325F335F345F35" на Nul
ищем и заменяем совпадения. После чего сохраняем, данные в файл (не забыв про то что файл для этого нужно открыть в бинарном режиме и для записи 16+2). Вот теперь рисунок должен бы был открыться, код вроде как совпадает, но если открыть этот "рисунок" в SciTe например, и включить - показывать Символы перевода строк, то можно увидеть что в некоторых местах по сравнению с оригиналом, нет совместимости в отображении этих самых символов, например отображается как CR, а в оригинале LF или CRLF и тому подобное. Поэтому я сделал вывод, что тут дело в том, что сам Autoit, что то "химичит" при получении кода через TCPRecv ...

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:41, 31-10-2009 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как получить картинку методом Get запросов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
как передать (не принять!) методом POST данные на др. сервер VART Вебмастеру 11 25-11-2010 12:54
Прочие БД - Подскажите как в ADODB вывести список запросов. Igor_I Программирование и базы данных 2 04-12-2009 20:47
Как растенуть картинку alleclf Вебмастеру 2 21-06-2008 19:46
[решено] Как отучить OpenOffice от сетевых запросов при запуске? Coutty Программное обеспечение Linux и FreeBSD 2 16-04-2008 10:03
Как сжать картинку? Sherla Хочу все знать 9 18-06-2003 10:54




 
Переход