requests method how headers example python http scripting httprequest http-head

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