Что нового

Как быстро открыть интернет-страницу

avtoIT

Новичок
Сообщения
94
Репутация
0
Нужно открыть страницу в интернете, но не нужно (не обязательно) визуально ее отображать, есть вот такой вариант
Код:
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "ссылка")
$oHTTP.Send()

Но это занимает примерно 0,5 секунды, не смотря на то что ссылка на сайте, который открывается всего 1 строчка и больше ничего нет. Или возможно оставить "прогружаться" страницу и выполнять дальнейшие действия?
Есть ли функция, которая может просмотреть страницу, за меньшее время. Если не отразится на времени желательно сохранить строку, которая загрузится.
Главная задача, чтобы сервер засчитал то, что по этой ссылке был выполнен переход.

Надеюсь, что понятно объяснил:smile:
 

uritalex

Новичок
Сообщения
197
Репутация
3
Ни при первом ни при втором варианте сервер не засчитает переход, если сервер или сайт более менее серьезный! Просто загрузи по обычному через
Код:
_IECreate(сайт, 0, 1)
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
uritalex сказал(а):
Ни при первом ни при втором варианте сервер не засчитает переход, если сервер или сайт более менее серьезный! Просто загрузи по обычному через
Код:
_IECreate(сайт, 0, 1)
Необязательно.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Собственно, все упирается в то, что значит "быстро".
_IECreate - один из самых медленных способов.

Вроде где-то была темы о скорости закачки, там были примеры закачки не всей страницы, а только части, или одновременной закачки нескольких страниц, например:
http://autoit-script.ru/index.php?topic=18662.0
http://autoit-script.ru/index.php?topic=19064.0
Так что в поиск...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
А если так:

Код:
_URLTrigger('http://google.com')

Func _URLTrigger($sURL, $sReferer = '')
	Local $aURL, $iOpt, $iSocket = -1, $sCommand = ''
	
	$aURL = StringRegExp($sURL, '^(?:[^:]+://)?([^/]+)(/?.+$)?', 3)
	
	If UBound($aURL) = 0 Then
		Return SetError(-1, 0, '')
	EndIf
	
	ReDim $aURL[2]
	$aURL[1] = '/'
	
	$iOpt = Opt('TCPTimeout', 5000)
	
	TCPStartup()
	$iSocket = TCPConnect(TCPNameToIP($aURL[0]), 80)
	
	If $iSocket = -1 Then
		Opt('TCPTimeout', $iOpt)
		TCPShutdown()
		Return SetError(1, 0, '')
	EndIf
	
	$sCommand &= 'GET ' & $aURL[1] & ' HTTP/1.1' & @CRLF
	$sCommand &= 'Host: ' & $aURL[0] & @CRLF
	$sCommand &= 'User-Agent: AutoIt/' & @AutoItVersion & ' (Windows 6.1; en-US)' & @CRLF
	$sCommand &= 'Referrer: ' & $sReferer & @CRLF
	$sCommand &= 'Connection: close' & @CRLF & @CRLF
	
	If TCPSend($iSocket, $sCommand) > 0 Then
		While TCPRecv($iSocket, 1024) = ''
			If @error Then ExitLoop
		WEnd
	EndIf
	
	Opt('TCPTimeout', $iOpt)
	TCPCloseSocket($iSocket)
	TCPShutdown()
	
	Return 1
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Или так:

Код:
_URLTrigger('http://google.com')

Func _URLTrigger($sURL)
	$hInet = InetGet($sURL, @TempDir & '\~trigger.tmp', 2+1, 1)
	
	While InetGetInfo($hInet, 0) = 0 And Not InetGetInfo($hInet, 2)
	WEnd
	
	InetClose($hInet)
	FileDelete(@TempDir & '\~trigger.tmp')
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
alex33 [?]
Мне кажется, что InetRead справился бы с такой задачей также, и без лишних файлов...
Она возвращает только после чтения всего файла по ссылке, а тут нужно только чтобы сработал переход по ссылке.
 
Автор
A

avtoIT

Новичок
Сообщения
94
Репутация
0
Спасибо, всем, кто ответил в этой теме, сейчас попробую опробовать все ваши варианты и напишу, какой все же работает быстрее:smile:
Итог:
InetRead 1 sec 185 msec
_IECreate 3 sec 811 msec (все параметры Default, кроме 2 (скрывал окно браузера))
_URLTrigger(1) 1 sec 475 msec
_URLTrigger(2) 1 sec 180 msec

Программа обрабатывала 3 ссылки.


Попробовал сделать вызов функции _IECreate без ожидания прогрузки страницы 0 sec 651 msec.

Всем спасибо за ответы.


Ну и еще один вопрос, засчитается ли переход в момент начала загрузки страницы или только когда она полностью прогрузится.
Т.е. в первом варианте _IECreate сервер засчитает запросы за ~4 секунды, а во втором за ~0,5 милисекунд или в первом случае, как и во втором, за 4?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Обычно переходы считает какая нибудь аналитика от яндекса или гугла, а она на JS который работает только в браузере.
 

uritalex

Новичок
Сообщения
197
Репутация
3
Попробуй дополнительно в браузере отключить картинки медиа и не нужные расширения так же ускорит
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
avtoIT [?]
Ну и еще один вопрос, засчитается ли переход в момент начала загрузки страницы или только когда она полностью прогрузится.
А это уже зависит от специфики сайта, сервера, того, как и чем он считает переходы.
 
Верх