Что нового

[Сеть, интернет] Как получить дату файла из интернета

Danver

Новичок
Сообщения
26
Репутация
2
Ребята, как получить дату файла из интернета (http://my-site.com/file.rar) не скачивая его?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
$sURL = "http://autoit-script.ru/index.php?action=downloads;sa=downfile&id=83"

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

$sResponse = _HTTPGetResponse($sHost, $sPage)

$sRet = StringRegExpReplace($sResponse, "(?s).*Last-Modified: (.*?)[\r\n].*", "\1")

MsgBox(64, "File Hedaer", $sResponse)
MsgBox(64, "Last-Modified", $sRet)

Func _HTTPGetResponse($sHost, $sPage)
	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 = "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
	
	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
		EndIf
		
		If $sCurrentRecv <> "" Then
			$sRecv &= $sCurrentRecv
		EndIf
	WEnd
	
	TCPCloseSocket($iSocket)
	TCPShutdown()
	
	Return $sRecv
EndFunc
 
Автор
D

Danver

Новичок
Сообщения
26
Репутация
2
не получилось вытащить дату для файла:
http://members.ozemail.com.au/~nulifetv/freezip/freeware/edxor_setup.exe

пустые мессэджбоксы.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Danver это не то?
Код:
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST","http://members.ozemail.com.au/~nulifetv/freezip/freeware/edxor_setup.exe")
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader("Accept", "*/*")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
$oHTTP.Send()
$oHTTP.WaitForResponse
$LASTMODIFIED=$oHTTP.GetResponseHeader("LAST-MODIFIED")
MsgBox(0,"Дата последнего изменения файла.", $LASTMODIFIED)
 
Автор
D

Danver

Новичок
Сообщения
26
Репутация
2
Garrett сказал(а):

при выполнении этого кода у меня во фрейме Output SciTE пишет:
Код:
>Running:(3.3.4.0):Z:\Soft\AutoIt\autoit3.exe "Z:\Soft\AutoIt\DanverScripts\test3.au3"    
Z:\Soft\AutoIt\DanverScripts\test3.au3 (6) : ==> The requested action with this object has failed.:
$oHTTP.Send()
$oHTTP.Send()^ ERROR
->14:11:27 AutoIT3.exe ended.rc:1
>Exit code: 1    Time: 2.165
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Danver [?]
при выполнении этого кода у меня во фрейме Output SciTE пишет
Вот поэтому я не люблю использовать COM когда можно использовать встроенные средства AutoIt.

Попробуй через Execute('$oHTTP.Send()').

Ты так и не ответил про @error...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
OffTopic:
CreatoR [?]
Вот поэтому я не люблю использовать COM когда можно использовать встроенные средства AutoIt.
На счёт встроенных средств согласен!
Однако, WinHttp.WinHttpRequest.5.1 это родной СОМ для Windows :scratch:
[?]
Там разве не GET HEAD нужен вместо POST?
Думаю не критично, разница в методе передачи данных. Мы же не передаем данные.
 
Автор
D

Danver

Новичок
Сообщения
26
Репутация
2
файл скачивается нормально InetGet'ом:

Код:
Local $fLink

$fLink = "http://members.ozemail.com.au/~nulifetv/freezip/freeware/edxor_setup.exe"
$lfile_path = "D:\444.exe"

$download = InetGet($fLink,$lfile_path,1,1)
InetClose ($download)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Danver
Тогда не знаю, у тебя что-то видимо в системе нарушено.

Garrett [?]
WinHttp.WinHttpRequest.5.1 это родной СОМ для Windows
Оно может быть отключено.

Думаю не критично, разница в методе передачи данных. Мы же не передаем данные.
Но в первом сообщений сказано:
[?]
как получить дату файла из интернета (http://my-site.com/file.rar) не скачивая его?
с GET файл скачивается, на счёт POST не уверен, но в любом случае при HEAD обрабатывается быстрее.
 
Автор
D

Danver

Новичок
Сообщения
26
Репутация
2
только что попробовал на домашнем ПК все примеры, которые тут приводили - работают!

видимо дело действительно в системе... но вот в чем...
 
Верх