Vérifier si un site web est en place via Python
11 réponses
vous pouvez essayer de le faire avec getcode()
de urllib
>>> print urllib.urlopen("http://www.stackoverflow.com").getcode()
>>> 200
EDIT: Pour plus modernes python, c'est à dire python3
, utilisez:
import urllib.request
print(urllib.request.urlopen("http://www.stackoverflow.com").getcode())
>>> 200
import httplib
import socket
import re
def is_website_online(host):
""" This function checks to see if a host name has a DNS entry by checking
for socket info. If the website gets something in return,
we know it's available to DNS.
"""
try:
socket.gethostbyname(host)
except socket.gaierror:
return False
else:
return True
def is_page_available(host, path="/"):
""" This function retreives the status code of a website by requesting
HEAD data from the host. This means that it only requests the headers.
If the host cannot be reached or something else goes wrong, it returns
False.
"""
try:
conn = httplib.HTTPConnection(host)
conn.request("HEAD", path)
if re.match("^[23]\d\d$", str(conn.getresponse().status)):
return True
except StandardError:
return None
l'objet HTTPConnection
du module httplib
de la bibliothèque standard fera probablement l'affaire pour vous. BTW, si vous commencez à faire quelque chose de avancé avec HTTP en Python, assurez-vous de vérifier httplib2
; c'est une grande bibliothèque.
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request("http://stackoverflow.com")
try:
response = urlopen(req)
except HTTPError as e:
print('The server couldn\'t fulfill the request.')
print('Error code: ', e.code)
except URLError as e:
print('We failed to reach a server.')
print('Reason: ', e.reason)
else:
print ('Website is working fine')
Travaille sur Python 3
si par up, vous voulez simplement dire" le serveur sert", alors vous pouvez utiliser cURL, et si vous obtenez une réponse que c'est en place.
Je ne peux pas vous donner de conseil spécifique car je ne suis pas un programmeur python, cependant voici un lien vers pycurl http://pycurl.sourceforge.net / .
si le serveur est désactivé, sur Python 2.7 x86, les urllib windows n'ont pas de délai d'attente et le programme est verrouillé. Ainsi, utilisez urllib2
import urllib2
import socket
def check_url( url, timeout=5 ):
try:
return urllib2.urlopen(url,timeout=timeout).getcode() == 200
except urllib2.URLError as e:
return False
except socket.timeout as e:
print False
print check_url("http://google.fr") #True
print check_url("http://notexist.kc") #False
Bonjour cette classe peut faire un test de vitesse et de up pour votre page Web avec cette classe:
from urllib.request import urlopen
from socket import socket
import time
def tcp_test(server_info):
cpos = server_info.find(':')
try:
sock = socket()
sock.connect((server_info[:cpos], int(server_info[cpos+1:])))
sock.close
return True
except Exception as e:
return False
def http_test(server_info):
try:
# TODO : we can use this data after to find sub urls up or down results
startTime = time.time()
data = urlopen(server_info).read()
endTime = time.time()
speed = endTime - startTime
return {'status' : 'up', 'speed' : str(speed)}
except Exception as e:
return {'status' : 'down', 'speed' : str(-1)}
def server_test(test_type, server_info):
if test_type.lower() == 'tcp':
return tcp_test(server_info)
elif test_type.lower() == 'http':
return http_test(server_info)
voici ma solution en utilisant PycURL et validators
"import pycurl, validators
def url_exists(url):
"""
Check if the given URL really exists
:param url: str
:return: bool
"""
if validators.url(url):
c = pycurl.Curl()
c.setopt(pycurl.NOBODY, True)
c.setopt(pycurl.FOLLOWLOCATION, False)
c.setopt(pycurl.CONNECTTIMEOUT, 10)
c.setopt(pycurl.TIMEOUT, 10)
c.setopt(pycurl.COOKIEFILE, '')
c.setopt(pycurl.URL, url)
try:
c.perform()
response_code = c.getinfo(pycurl.RESPONSE_CODE)
c.close()
return True if response_code < 400 else False
except pycurl.error as err:
errno, errstr = err
raise OSError('An error occurred: {}'.format(errstr))
else:
raise ValueError('"{}" is not a valid url'.format(url))
vous pouvez utiliser requests
bibliothèque pour trouver si le site web est up i.e. status code
comme 200
import requests
url = "https://www.google.com"
page = requests.get(url)
print (page.status_code)
>> 200