PDA

Показать полную графическую версию : [решено] скачать с помощью inetget - как определить перенаправление


AlexM
27-01-2011, 17:55
inetget не читает файлы с перенаправлением. Про частную случай спрашивал в
http://forum.oszone.net/thread-197103.html
как прочить файл напр
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
и получил ответ.

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

Creat0R
27-01-2011, 19:31
как прочить файл напр »
А браузер тут тоже ничего не выдаёт.

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

AlexM
28-01-2011, 12:44
парсировать на придмет перенаправления, »
Это какие символы искать?

Creat0R
28-01-2011, 18:35
Это какие символы искать? »
Вот как то так:

$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 (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sURL, '^.*/', '')
_HTTPGetFile($sURL, @DesktopDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@desktopdir))

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

$sHost = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sURL, ".*://(.*?)/.*", "\1")
$sPage = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sURL, ".*://.*?(/.*)", "\1")

TCPStartup (http://www.autoitscript.com/autoit3/docs/functions/TCPStartup.htm)()

$sName_To_IP = TCPNameToIP (http://www.autoitscript.com/autoit3/docs/functions/TCPNameToIP.htm)($sHost)
$iSocket = TCPConnect (http://www.autoitscript.com/autoit3/docs/functions/TCPConnect.htm)($sName_To_IP, 80)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iSocket = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
TCPShutdown (http://www.autoitscript.com/autoit3/docs/functions/TCPShutdown.htm)()
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1, 0, "")
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$sCommand = "HEAD " & $sPage & " HTTP/1.1" & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)

$sCommand &= "Host: " & $sHost & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)
$sCommand &= "User-Agent: AutoIt/" & @AutoItVersion (http://www.autoitscript.com/autoit3/docs/macros.htm#@autoitversion) & " (Windows; U; Windows NT 5.1; en-US; rv:1.8.1)" & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)
$sCommand &= "Referer: " & $sHost & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)
$sCommand &= "Connection: close" & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf)

$iBytesSent = TCPSend (http://www.autoitscript.com/autoit3/docs/functions/TCPSend.htm)($iSocket, $sCommand)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iBytesSent = 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
TCPShutdown (http://www.autoitscript.com/autoit3/docs/functions/TCPShutdown.htm)()
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(2, @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error), 0)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$sCurrentRecv = TCPRecv (http://www.autoitscript.com/autoit3/docs/functions/TCPRecv.htm)($iSocket, 16)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) <> 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sCurrentRecv <> "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sRecv &= $sCurrentRecv
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

TCPCloseSocket (http://www.autoitscript.com/autoit3/docs/functions/TCPCloseSocket.htm)($iSocket)
TCPShutdown (http://www.autoitscript.com/autoit3/docs/functions/TCPShutdown.htm)()

$sNew_URL = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sRecv, $sLocation_Pattern, '\1')

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @extended (http://www.autoitscript.com/autoit3/docs/macros.htm#@extended) = 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sRecv = BinaryToString (http://www.autoitscript.com/autoit3/docs/functions/BinaryToString.htm)(InetRead (http://www.autoitscript.com/autoit3/docs/functions/InetRead.htm)($sURL))

$sNew_URL = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sRecv, $sMeta_Pattern, '\1')

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sNew_URL, $sFileName_Pattern) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sNew_URL = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sRecv, $sJS1_Pattern , '\1')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sNew_URL, $sFileName_Pattern) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sNew_URL = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sRecv, $sJS2_Pattern, '\1')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sNew_URL, $sFileName_Pattern) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sNew_URL = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sRecv, $sPHP_Pattern, '\1')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sNew_URL, $sHost_Pattern) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sNew_URL = 'http://' & $sHost & '/' & StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sNew_URL, '^/+', '')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) StringInStr (http://www.autoitscript.com/autoit3/docs/functions/StringInStr.htm)(FileGetAttrib (http://www.autoitscript.com/autoit3/docs/functions/FileGetAttrib.htm)($sFile), 'D') Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sFile &= '\' & StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sNew_URL, '^.*/', '')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) InetGet (http://www.autoitscript.com/autoit3/docs/functions/InetGet.htm)($sNew_URL, $sFile, $iOptions, $iBackground)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)




© OSzone.net 2001-2012