Pythonを使用して、Webサイトが稼働しているかどうかを確認するにはどうすればよいですか?読んだ内容から、「HTTP HEAD」を確認し、ステータスコード「200OK」を確認する必要がありますが、どうすればよいですか?
乾杯
Pythonを使用して、Webサイトが稼働しているかどうかを確認するにはどうすればよいですか?読んだ内容から、「HTTP HEAD」を確認し、ステータスコード「200OK」を確認する必要がありますが、どうすればよいですか?
乾杯
あなたはurllibgetcode()
からこれを行うことを試みることができます
import urllib.request
print(urllib.request.urlopen("https://www.stackoverflow.com").getcode())
200
Python 2の場合、
print urllib.urlopen("http://www.stackoverflow.com").getcode()
200
これを行う最も簡単な方法は、 Requestsモジュールを使用することだと思います。
import requests
def url_ok(url):
r = requests.head(url)
return r.status_code == 200
httplibを使用できます
import httplib
conn = httplib.HTTPConnection("www.python.org")
conn.request("HEAD", "/")
r1 = conn.getresponse()
print r1.status, r1.reason
版画
200 OK
もちろん、www.python.org
アップしている場合に限ります。
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
標準ライブラリのモジュールからのHTTPConnection
オブジェクトは、httplib
おそらくあなたのためにトリックを行うでしょう。ところで、PythonでHTTPを使って高度なことを始めた場合は、必ずチェックしてくださいhttplib2
。それは素晴らしい図書館です。
稼働中の場合は、単に「サーバーがサービスを提供している」という意味であり、cURLを使用できます。稼働中よりも応答があった場合は、
私はPythonプログラマーではないため、具体的なアドバイスはできませんが、ここにpycurlhttp://pycurl.sourceforge.net/へのリンクがあります。
これにはリクエストを使用します。これは簡単でクリーンです。印刷機能の代わりに、新しい機能を定義して呼び出すことができます (電子メールで通知するなど)。ホストに到達できない場合、多くの例外が発生するため、それらをすべてキャッチする必要があるため、try-exceptブロックは不可欠です。
import requests
URL = "https://api.github.com"
try:
response = requests.head(URL)
except Exception as e:
print(f"NOT OK: {str(e)}")
else:
if response.status_code == 200:
print("OK")
else:
print(f"NOT OK: HTTP response code {response.status_code}")
PycURLとバリデーターを使用した私のソリューションは次のとおりです。
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))
この方法でウェブサイトのステータスを確認することもできます。
Import requests
def monitor():
r = requests.get("https://www.google.com/", timeout=5)
print(r.status_code)