Что нового

Проверка сайта на существование

forfrends

Новичок
Сообщения
176
Репутация
3
Добрый день!
У меня есть вопрос:
Можно ли средствами аутоит проверить сай на существование?
Допустим, у меня есть txt файлик с небольшим списком сайтов (5-10) и мне нужно проверить что они реально существуют, а не просто набор символов. Как это сделать?
Можно пример, или ссылку где это можно посмотреть?

Мне нужен сам пример проверки сайта, остальное сам доработаю.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Код:
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1') ;Создаём COM-объект

If @error Then
    MsgBox(16, 'Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
    Exit 1
EndIf

$oErrorHandler = ObjEvent('AutoIt.Error', 'ErrorFunc') ;Создаём обработчик ошибок (COM Error Handling http://www.autoitscript.com/autoit3/docs/intro/ComRef.htm)
$oRequest.Open('GET', 'http://autoit-script.ru', 0)
$oRequest.Send()
$sData = $oRequest.Status
$oErrorHandler = 0

If $sData = 200 Then MsgBox(0, 'Status', "Сайт существует и никуда не перенаправил.")

Func ErrorFunc()
    MsgBox(16, 'Ошибка', $oErrorHandler.description)
    Exit 2
EndFunc
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Мой вариант (вроде работает :smile:):

Файл со списком сайтов (пример (Сайты.txt)):
Код:
www.hjsadljkashdlkas.com
www.google.ru
www.youtube.com
www.jhsfksjfkjfdksdfksjdfksjdfskjf.qe
www.autoit-script.ru

Сам скрипт:
Код:
#include <File.au3>

$LineCount = _FileCountLines(@ScriptDir & '\Сайты.txt')
For $i = 1 To $LineCount
	$Url = FileReadLine(@ScriptDir & '\Сайты.txt', $i)
	$Ping = Ping($Url)
	If $Ping Then
		MsgBox(0, '', 'Сайт существует')
	Else
		MsgBox(0, '', 'Сайт не существует')
	EndIf
Next
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Zaramot
Пинг - одно, а ответ сервера - совсем другое. Списки кодов состояния HTTP
Т.е. Пинг по домену может пройти, но сайт отдает на любой странице 404 или 502

OffTopic:
Про 418 ошибку вообще молчу :D
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Вроде еще с пингом проблемы у тех, кто через прокси получает интернет.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вариант с TCP (без использования COM-объекта):

Код:
$sServer = "http://autoit-script.ru"
$iPort = 80

If _HTTPServerIsOnline($sServer, $iPort) Then
	MsgBox(64, "Проверка сервера", "Сервер [" & $sServer & "] on-line.")
Else
	MsgBox(48, "Проверка сервера", "Сервер [" & $sServer & "] НЕ on-line.")
EndIf

Func _HTTPServerIsOnline($sServer, $iPort = 80)
	TCPStartup()
	
	$sServer = StringRegExpReplace($sServer, '(?i)^[a-z]{3,6}://', '')
	
	Local $sName_To_IP = TCPNameToIP($sServer)
	Local $iSocket = TCPConnect($sName_To_IP, $iPort)
	
	If $iSocket = -1 Then
		TCPCloseSocket($iSocket)
		Return SetError(1, 0, "")
	EndIf
	
	Local $sCommand = "HEAD / HTTP/1.1" & @CRLF
	
	$sCommand &= "Host: " & $sServer & @CRLF
	$sCommand &= "User-Agent: AutoIt/" & @AutoItVersion & " (Windows; U; Windows NT 5.1; en-US; rv:1.8.1)" & @CRLF
	$sCommand &= "Referer: " & $sServer & @CRLF
	$sCommand &= "Connection: close" & @CRLF & @CRLF
	
	Local $iBytesSent = TCPSend($iSocket, $sCommand)
	If $iBytesSent = 0 Then Return SetError(2, @error, 0)
	
	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 StringRegExp($sRecv, "(?i)HTTP/\d.\d (200|30[1-2])") = 1
EndFunc
 
Верх