Что нового

Вывод прогресс чтения страницы с помощью InetRead

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Есть некая страница, допустим yandex.ru, с помощью InetRead я читаю содержимое страницы, возможно ли вывести прогресс чтения, либо аналог функции InetGet + InetGetInfo без сохранения файла на диск?
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ладно, хорошо, нашёл способ чтения страницы с помощью GET запроса, как узнать размер страницы до её чтения?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Viktor1703 [?]
как узнать размер страницы до её чтения
Content-Length в заголовке ответа, но возвращают его для HTML-страниц достаточно редко.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oRequest.Open('HEAD', 'http://yandex.ru')
$oRequest.SetRequestHeader('User-Agent', 'aubro')
$oRequest.Send('')
MsgBox(32, '', $oRequest.GetResponseHeader("Content-Length"))
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
madmasles

Именно, в моём случае Content-Length не возвращается, тем более, мне нужно узнать размер страницы до её загрузки, что бы на основании полученных данных о размере выводить прогресс её загрузки.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Viktor1703
в случае, когда на странице есть javascript'ы изменяющие DOM страницы, то узнать размер до загрузки не получится. к примеру, сама "рыба" сайта несколько килобайт - только основная разметка страницы, а после подгрузки javascript грузит мегабайты данных.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Kaster

Жаль, тогда придётся выводить бесконечный Round progress и завершать его при полной загрузке страницы.


Добавлено:
Сообщение автоматически объединено:

Вот для чего всё делалось, скрипт проверяет статус трек-номера посылки, для примера дал трек-код своей посылки, [size=8pt]завтра иду получать[/size].

Код:
#include <Array.au3>

$aStatus = CheckParcelFromTrackNumber('RD058035771CN')
If IsArray($aStatus) Then
	_ArrayDisplay($aStatus)
EndIf

Func CheckParcelFromTrackNumber($sTrackId)
	Local $oHttp, $sResponse, $aParse, $aItem, $aResult[1][1], $i, $x

	$oHttp = ObjCreate('WinHttp.WinHttpRequest.5.1')
	If IsObj($oHttp) Then
		$oHttp.Open('GET', 'http://gdetoedet.ru/track/' & $sTrackId & '.print')
		$oHttp.SetRequestHeader('Connection', 'close')
		$oHttp.SetRequestHeader('User-Agent', 'AutoItPostChecker')
		$oHttp.SetRequestHeader('Host', 'gdetoedet.ru')
		$oHttp.Send()
		If ($oHttp.WaitForResponse And ($oHttp.Status == 200)) Then
			$sResponse = StringStripWS($oHttp.ResponseText, 4)
			If ($sResponse <> '') Then
				$aParse = StringRegExp($sResponse, '(?is)<tr>(.*?)</tr>', 3)
				If IsArray($aParse) Then
					ReDim $aResult[UBound($aParse)][1]
					For $i = 0 To UBound($aParse) - 1
						$aItem = StringRegExp($aParse[$i], '(?is)<t.*?>(.*?)</t.*?>', 3)
						If IsArray($aItem) Then
							If (Ubound($aResult, 2) < UBound($aItem)) Then
								ReDim $aResult[UBound($aResult)][UBound($aItem)]
							EndIf
							For $x = 0 To UBound($aItem) - 1
								$aResult[$i][$x] = StringRegExpReplace($aItem[$x], '(?i)<.*?>(.*?)<.*?>', '$1')
							Next
						Endif
					Next
					Return $aResult
				EndIf
			EndIf
		EndIf
	EndIf
	Return 0
EndFunc
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
alex33

Попробуй

Код:
MsgBox(0, '', InetGetSize('http://gdetoedet.ru/track/RD058035771CN.print'))
 
Верх