Что нового

[Сеть, интернет] Как получить сгенерированную ссылку для использования её в InetGet

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt 3.3.8.1
Подскажите как получить генерирующуюся на странице ссылку. Без использования дополнительных библиотек. То есть что-бы эту ссылку можно было использовать в
Код:
InetGet()

Вот такой код бесполезен:
Код:
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1')
If @error Then
    MsgBox(16, 'Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
    Exit 1
EndIf
$oErrorHandler = ObjEvent('AutoIt.Error', 'ErrorFunc')
Func ErrorFunc()
    MsgBox(16, 'Ошибка', $oErrorHandler.description)
    Exit 2
EndFunc
$oRequest.Open('GET', 'http://www.microsoft.com/silverlight/', 0)
$oRequest.SetRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; )") ;Указываем заголовок User-Agent
$oRequest.Send() ;отправляем запрос
$sDataIE = $oRequest.ResponseText
$oErrorHandler = 0
$url = StringRegExp($sDataIE, '(?i)[\<]a href[\=][\"](.*?)[\"] class[\=][\"]btnDownloadSilverlightPlugin', 3)
$Clearurl = $url[0]
MsgBox(4096, "",  $Clearurl)
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
CreatoR
Код:
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Option(6) = False ;WinHttpRequestOption_EnableRedirects
$oHTTP.Open("GET", "http://go.microsoft.com/fwlink?linkid=149156")
$oHTTP.Send()
$oHTTP.WaitForResponse
$sNewLocation = $oHTTP.GetResponseHeader("Location")
ConsoleWrite($sNewLocation & @LF)

Что я делаю не так?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ivsatel [?]
Что я делаю не так?
Всё вроде так, просто там перенаправляется больше чем один раз, у меня вот так получилось вытащить прямую ссылку:

Код:
$sGet = _HTTPGetResponse("www.microsoft.com", "/silverlight/", "GET")
$sURL = StringRegExpReplace($sGet, '(?si).*?<a href="([^"]+)" class="btnDownloadSilverlightPlugin.*', '\1')

$aSplit_URL = StringRegExp($sURL, 'http://([^/]+)(/.+)', 3)

While 1
	$sHead = _HTTPGetResponse($aSplit_URL[0], $aSplit_URL[1], "HEAD")
	
	If Not StringInStr($sHead, 'Location: ') Then
		ExitLoop
	EndIf
	
	$aSplit_URL = StringRegExp($sHead, '(?im)Location:\h*http://([^/]+)(/[^\r\n]+)', 3)
WEnd

$sURL = $aSplit_URL[0] & $aSplit_URL[1]
$iSize = StringRegExpReplace($sHead, '(?si).*?Content-Length:\h*([^\r\n]+).*', '\1')

MsgBox(64, 'Title', 'URL: ' & $sURL & @CRLF & @CRLF & 'Size: ' & $iSize)

Func _HTTPGetResponse($sHost, $sPage, $sRequest = "HEAD")
    TCPStartup()
    
    Local $sName_To_IP = TCPNameToIP($sHost)
    Local $iSocket = TCPConnect($sName_To_IP, 80)
    
    If $iSocket = -1 Then
        TCPShutdown()
        Return SetError(1, 0, "")
    EndIf
    
    Local $sCommand = $sRequest & " " & $sPage & " HTTP/1.0" & @CRLF
    $sCommand &= "Host: " & $sHost & @CRLF
    $sCommand &= "User-Agent: Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2;)" & @CRLF
    $sCommand &= "Referer: " & $sHost & @CRLF
    $sCommand &= "Connection: close" & @CRLF & @CRLF
    
    Local $BytesSent = TCPSend($iSocket, $sCommand)
    
    If $BytesSent = 0 Then
        TCPShutdown()
        Return SetError(2, @error, 0)
    EndIf
    
    Local $sRecv = "", $sCurrentRecv
    
    While 1
        $sCurrentRecv = TCPRecv($iSocket, 16)
        If @error <> 0 Then ExitLoop
        If $sCurrentRecv <> "" Then $sRecv &= $sCurrentRecv
    WEnd
    
    TCPCloseSocket($iSocket)
    TCPShutdown()
    
    Return $sRecv
EndFunc
 
Верх