Что нового

[ Интернет ] Скачать файл и установить

SNAK

SNAK
Сообщения
59
Репутация
0
У меня есть шрифты http://ska4ay.pro/-KbS и мне надо их от туда скачать и установить .
1. Либо в обход рекламы.
2. Либо с рекламой ,но удалив её
Код:
InetGet('http://ska4ay.pro/-KbS', @ScriptDir & '\ObelixPro-cyr.zip')

Так не выходит . :scratch:
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Это связано с тем, что файл "ObelixPro-cyr.zip" не находится по ссылке "http://ska4ay.pro/-KbS"

Код:
#include "WinHttp.au3"

global $proxyUse = False
global $sProxyServer = "IP:Port" ; указывается прокси формата ip:port
Global $sDir = @ScriptDir & "\obelixpro-cyr.exe"
global $Domen		= "ska4ay.pro"

If $proxyUse Then
	$hOpen = _WinHttpOpen('au3browser', $WINHTTP_ACCESS_TYPE_NAMED_PROXY, $sProxyServer) ;инициализируем использование WinHTTP-функций, указываем заголовок User-Agent
Else
	$hOpen = _WinHttpOpen('au3browser') ;инициализируем использование WinHTTP-функций, указываем заголовок User-Agent
EndIf

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось инициализировать использование WinHttp-функций.')
    Exit 1
EndIf

$hConnect = _WinHttpConnect($hOpen, $Domen) ;создаём соеденение, указываем только домен/ip-адрес

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось создать соеденение.')
	_WinHttpCloseHandle($hOpen)
    Exit 2
EndIf

$sData = _WinHttpSimpleRequest($hConnect, 'GET', '/-KbS', default, default, default, True) ;отправляем запрос, указываем его метод, адрес страницы без домена и параметры

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось отправить сообщение.')
    Exit 3
EndIf


Global $hHttpRequest = _WinHttpOpenRequest($hConnect, 'POST', '/-KbS')
_WinHttpSendRequest($hHttpRequest)
_WinHttpReceiveResponse($hHttpRequest)

Global $bChunk, $bData, $hFile
If _WinHttpQueryDataAvailable($hHttpRequest) Then
    While 1
        $bChunk = _WinHttpReadData($hHttpRequest, 2) ; read binary
        If @error Then ExitLoop
        $bData = _WinHttpBinaryConcat($bData, $bChunk) ; concat two binary data
    WEnd
    ; Save it to the file
    $hFile = FileOpen($sDir, 26)
    FileWrite($hFile, $bData)
    FileClose($hFile)
Else
    MsgBox(48, "Error occurred", "No data available. " & @CRLF)
EndIf


; Close handles
_WinHttpCloseHandle($hHttpRequest)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)

; See what's downloaded
ShellExecute($sDir)

Если коротко, то заходим на адрес. Получаем Cookie. Делаем POST запрос на тот же адрес с полученными Cookie. Далее идет перенаправление на другой адрес с бинарными данными, с которых формируем файл.
Единственное, делал на скорую руку и не разбирался, как сразу получить все данные и как получить имя файла.
 
Автор
SNAK

SNAK

SNAK
Сообщения
59
Репутация
0
mef-t сказал(а):
Это связано с тем, что файл "ObelixPro-cyr.zip" не находится по ссылке "http://ska4ay.pro/-KbS"

Код:
#include "WinHttp.au3"

global $proxyUse = False
global $sProxyServer = "IP:Port" ; указывается прокси формата ip:port
Global $sDir = @ScriptDir & "\obelixpro-cyr.exe"
global $Domen		= "ska4ay.pro"

If $proxyUse Then
	$hOpen = _WinHttpOpen('au3browser', $WINHTTP_ACCESS_TYPE_NAMED_PROXY, $sProxyServer) ;инициализируем использование WinHTTP-функций, указываем заголовок User-Agent
Else
	$hOpen = _WinHttpOpen('au3browser') ;инициализируем использование WinHTTP-функций, указываем заголовок User-Agent
EndIf

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось инициализировать использование WinHttp-функций.')
    Exit 1
EndIf

$hConnect = _WinHttpConnect($hOpen, $Domen) ;создаём соеденение, указываем только домен/ip-адрес

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось создать соеденение.')
	_WinHttpCloseHandle($hOpen)
    Exit 2
EndIf

$sData = _WinHttpSimpleRequest($hConnect, 'GET', '/-KbS', default, default, default, True) ;отправляем запрос, указываем его метод, адрес страницы без домена и параметры

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось отправить сообщение.')
    Exit 3
EndIf


Global $hHttpRequest = _WinHttpOpenRequest($hConnect, 'POST', '/-KbS')
_WinHttpSendRequest($hHttpRequest)
_WinHttpReceiveResponse($hHttpRequest)

Global $bChunk, $bData, $hFile
If _WinHttpQueryDataAvailable($hHttpRequest) Then
    While 1
        $bChunk = _WinHttpReadData($hHttpRequest, 2) ; read binary
        If @error Then ExitLoop
        $bData = _WinHttpBinaryConcat($bData, $bChunk) ; concat two binary data
    WEnd
    ; Save it to the file
    $hFile = FileOpen($sDir, 26)
    FileWrite($hFile, $bData)
    FileClose($hFile)
Else
    MsgBox(48, "Error occurred", "No data available. " & @CRLF)
EndIf


; Close handles
_WinHttpCloseHandle($hHttpRequest)
_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)

; See what's downloaded
ShellExecute($sDir)

Если коротко, то заходим на адрес. Получаем Cookie. Делаем POST запрос на тот же адрес с полученными Cookie. Далее идет перенаправление на другой адрес с бинарными данными, с которых формируем файл.
Единственное, делал на скорую руку и не разбирался, как сразу получить все данные и как получить имя файла.
проблемы с библиотекой пишет типо не поддерживает 64 бит
 
A

Alofa

Гость
OffTopic:
SNAK я смотрю вы не ищите коротких путей :smile:
Код:
#RequireAdmin
#Include <WinAPIEx.au3>
#Include <APIConstants.au3>

Local $sURL = 'http://www.myfontfree.com/data/4/o/obelixpro/ObelixProIt-cyr.ttf'
Local $sFileFont = 'ObelixProIt-cyr.ttf'
Local $sFileDir = @ScriptDir & '\' & $sFileFont
Local $sDst = _WinAPI_ShellGetSpecialFolderPath($CSIDL_FONTS)

InetGet($sURL, $sFileDir, 16) ; Скачиваем шрифт в исходном состоянии
If Not FileExists($sFileDir) Then MsgBox(4096, 'Ой!', 'Не получилось(((')

; Установка шрифта
Switch FileCopy($sFileDir, @WindowsDir & '\Fonts\', 1)
	Case 1 ; Установка [от Yashied](http://autoit-script.ru/index.php?topic=3076.0)
		$Name = _WinAPI_GetFontResourceInfo($sFileDir, 1)
		If @error Then ContinueCase
		If Not RegWrite('HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', $Name & ' (TrueType)', 'REG_SZ', $sDst & '\' & $sFileFont) Then ContinueCase
		If _WinAPI_AddFontResourceEx($sDst & '\' & $sFileFont) Then ; Добавляет ресурс шрифта из указанного файла в таблицу системных шрифтов
			_WinAPI_BroadcastSystemMessage($WM_FONTCHANGE, 0, 0, $BSF_IGNORECURRENTTASK) ; Отправляет сообщение указанным получателям
		Else
			RegDelete('HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', $Name & ' (TrueType)')
			ContinueCase
		EndIf
	Case Else ; Если не получилось, то применяем другой способ [от Garrett]
		$oShell = ObjCreate("Shell.Application")
		$oShell.Namespace(0x14).CopyHere($sFileDir)
EndSwitch

Или заморочка со шрифтом это просто для примера?
 
Верх