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

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

Ответить
Настройки темы
[решено] скачать с помощью inetget - как определить перенаправление

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


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

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


inetget не читает файлы с перенаправлением. Про частную случай спрашивал в
http://forum.oszone.net/thread-197103.html
как прочить файл напр
http://www.oszone.net/go.php?url=htt..._notes&ext=pdf
и получил ответ.

Решение моего прошлого вопроса работает, но посоветованный код следует применять только для определенного синтаксиса в ссылке.
Понял, что назрел общий вопрос, который возможно нужно было сразу спросить.
Может кто знает, чем отличаются ссылки http с перенаправлением или без? Есть необходимое и достаточное условие чтобы узнать, читать просто по ссылке или узнавать куда перенаправляют и как?
Спасибо!

Отправлено: 17:55, 27-01-2011

 

Аватара для Creat0R

Must AutoIt


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

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


Цитата AlexM:
как прочить файл напр »
А браузер тут тоже ничего не выдаёт.

По идее нужно делать запрос и получать заголовок, если в нём есть Location: то читать оттуда новую ссылку, если нет, читать тело страницы и парсировать на придмет перенаправления, ну и если там нет ничего нового, тогда сохранять содержимое этой самой страницы в файл.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

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

Отправлено: 19:31, 27-01-2011 | #2



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

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


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


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

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


Цитата Creat0R:
парсировать на придмет перенаправления, »
Это какие символы искать?

Отправлено: 12:44, 28-01-2011 | #3


Аватара для Creat0R

Must AutoIt


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

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


Цитата AlexM:
Это какие символы искать? »
Вот как то так:

Код: Выделить весь код
$sURL = "http://www.oszone.net/go.php?url=http://www.lada-auto.ru/cgi-bin/viewlist.pl?id=85544&fld=file_&tbl=vaz_catalogue_notes&ext=pdf"

$sFileName = StringRegExpReplace($sURL, '^.*/', '')
_HTTPGetFile($sURL, @DesktopDir)

Func _HTTPGetFile($sURL, $sFile, $iOptions = 0, $iBackground = 0)
    Local $sHost, $sPage, $sName_To_IP, $iSocket, $sCommand, $iBytesSent, $sCurrentRecv, $sNew_URL, $sRecv
    Local $sFileName_Pattern = '^(/?[^/]*/)?[^/]*\.\w{1,5}$'
    Local $sHost_Pattern = '^([^:/]*://|www\.)[^/]*/.*$'
    Local $sLocation_Pattern = '(?si).*Location: (.*?)[\r\n].*'
    Local $sMeta_Pattern = '(?si).*<meta http-equiv=[''"]REFRESH[''"]\s*CONTENT=[''"]\d+;URL=(.*)[''"]>.*'
    Local $sJS1_Pattern = '(?si).*(?:window|document)\.location\.replace\([''"](.*)[''"]\).*'
    Local $sJS2_Pattern = '(?si).*(?:window|document)\.location\.href\s*=\s*[''"](.*)[''"].*'
    Local $sPHP_Pattern = '(?si).*header\([''"]Location:\s*(.*)[''"]\).*'

    $sHost = StringRegExpReplace($sURL, ".*://(.*?)/.*", "\1")
    $sPage = StringRegExpReplace($sURL, ".*://.*?(/.*)", "\1")

    TCPStartup()

    $sName_To_IP = TCPNameToIP($sHost)
    $iSocket = TCPConnect($sName_To_IP, 80)

    If $iSocket = -1 Then
        TCPShutdown()
        Return SetError(1, 0, "")
    EndIf

    $sCommand = "HEAD " & $sPage & " HTTP/1.1" & @CRLF

    $sCommand &= "Host: " & $sHost & @CRLF
    $sCommand &= "User-Agent: AutoIt/" & @AutoItVersion & " (Windows; U; Windows NT 5.1; en-US; rv:1.8.1)" & @CRLF
    $sCommand &= "Referer: " & $sHost & @CRLF
    $sCommand &= "Connection: close" & @CRLF & @CRLF

    $iBytesSent = TCPSend($iSocket, $sCommand)

    If $iBytesSent = 0 Then
        TCPShutdown()
        Return SetError(2, @error, 0)
    EndIf

    While 1
        $sCurrentRecv = TCPRecv($iSocket, 16)

        If @error <> 0 Then
            ExitLoop
        EndIf

        If $sCurrentRecv <> "" Then
            $sRecv &= $sCurrentRecv
        EndIf
    WEnd

    TCPCloseSocket($iSocket)
    TCPShutdown()

    $sNew_URL = StringRegExpReplace($sRecv, $sLocation_Pattern, '\1')

    If @extended = 0 Then
        $sRecv = BinaryToString(InetRead($sURL))

        $sNew_URL = StringRegExpReplace($sRecv, $sMeta_Pattern, '\1')

        If Not StringRegExp($sNew_URL, $sFileName_Pattern) Then
            $sNew_URL = StringRegExpReplace($sRecv, $sJS1_Pattern , '\1')
        EndIf

        If Not StringRegExp($sNew_URL, $sFileName_Pattern) Then
            $sNew_URL = StringRegExpReplace($sRecv, $sJS2_Pattern, '\1')
        EndIf

        If Not StringRegExp($sNew_URL, $sFileName_Pattern) Then
            $sNew_URL = StringRegExpReplace($sRecv, $sPHP_Pattern, '\1')
        EndIf

        If Not StringRegExp($sNew_URL, $sHost_Pattern) Then
            $sNew_URL = 'http://' & $sHost & '/' & StringRegExpReplace($sNew_URL, '^/+', '')
        EndIf
    EndIf

    If StringInStr(FileGetAttrib($sFile), 'D') Then
        $sFile &= '\' & StringRegExpReplace($sNew_URL, '^.*/', '')
    EndIf

    Return InetGet($sNew_URL, $sFile, $iOptions, $iBackground)
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

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

Отправлено: 18:35, 28-01-2011 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как самостоятельно определить сбойный драйвер с помощью дампа памяти? Alfacentavra Хочу все знать 50 02-02-2012 13:50
[решено] как с помощью If...Else определить какой используеться дисплей? justaman AutoIt 1 29-01-2009 06:13
BSOD - Как с помощью дампа памяти определить драйвер, вызывающий BSOD Vadikan Устранение критических ошибок Windows 0 04-11-2007 03:10
Перенаправление пользователя в Novell Netware с помощью jsp IO Вебмастеру 3 10-11-2005 21:05
Как определить возможность перепрожига болванки CD с помощью NERO CD-DVD Speed gormark Оптические приводы 14 05-04-2005 17:13




 
Переход