method - python send post api
Verifica si un sitio web está activo a través de Python (10)
Al usar Python, ¿cómo puedo verificar si un sitio web está activo? Según lo que leí, necesito verificar el "HTTP HEAD" y ver el código de estado "200 OK", pero ¿cómo hacerlo?
Aclamaciones
Relacionado
Aquí está mi solución usando PycURL y validadores
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))
El objeto httplib
módulo httplib
en la biblioteca estándar probablemente sea el truco para usted. Por cierto, si comienzas a hacer algo avanzado con HTTP en Python, asegúrate de revisar httplib2
; es una gran biblioteca.
Puedes usar httplib
import httplib
conn = httplib.HTTPConnection("www.python.org")
conn.request("HEAD", "/")
r1 = conn.getresponse()
print r1.status, r1.reason
huellas dactilares
200 OK
Por supuesto, solo si www.python.org
está arriba.
Si para arriba, simplemente quiere decir "el servidor está sirviendo", entonces podría usar cURL, y si obtiene una respuesta de lo que está disponible.
No puedo darle consejos específicos porque no soy un programador de Python, sin embargo, aquí hay un enlace a pycurl http://pycurl.sourceforge.net/ .
Creo que la forma más fácil de hacerlo es mediante el uso del módulo de Solicitudes .
import requests
def url_ok(url):
r = requests.head(url)
return r.status_code == 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
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
req = Request("http://.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'')
Funciona en Python 3
Hola, esta clase puede acelerar y mejorar la prueba de tu página web con esta clase:
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)
Si el servidor está inactivo, en el windows urlib de python 2.7 x86 no hay tiempo de espera y el programa va a bloqueo muerto. Entonces usa 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
Podría intentar hacer esto con getcode()
desde urllib
>>> print urllib.urlopen("http://www..com").getcode()
>>> 200
EDITAR: Para Python más moderno, es decir, python3
, use:
import urllib.request
print(urllib.request.urlopen("http://www..com").getcode())
>>> 200