|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] скачать с помощью inetget - как определить перенаправление |
|
[решено] скачать с помощью inetget - как определить перенаправление
|
Пользователь Сообщения: 73 |
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 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата AlexM:
По идее нужно делать запрос и получать заголовок, если в нём есть Location: то читать оттуда новую ссылку, если нет, читать тело страницы и парсировать на придмет перенаправления, ну и если там нет ничего нового, тогда сохранять содержимое этой самой страницы в файл. |
|
------- Отправлено: 19:31, 27-01-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 73
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
|
|
Отправлено: 12:44, 28-01-2011 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
|
------- Отправлено: 18:35, 28-01-2011 | #4 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Как самостоятельно определить сбойный драйвер с помощью дампа памяти? | 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 |
|