77

Pythonを使用して、Webサイトが稼働しているかどうかを確認するにはどうすればよいですか?読んだ内容から、「HTTP HEAD」を確認し、ステータスコード「200OK」を確認する必要がありますが、どうすればよいですか?

乾杯

関連している

4

16 に答える 16

118

あなたは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
于 2009-12-22T21:38:11.877 に答える
31

これを行う最も簡単な方法は、 Requestsモジュールを使用することだと思います。

import requests

def url_ok(url):
    r = requests.head(url)
    return r.status_code == 200
于 2013-04-01T12:36:55.227 に答える
11

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アップしている場合に限ります。

于 2009-12-22T21:44:21.073 に答える
8
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
于 2009-12-22T22:06:52.300 に答える
4

標準ライブラリのモジュールからのHTTPConnectionオブジェクトは、httplibおそらくあなたのためにトリックを行うでしょう。ところで、PythonでHTTPを使って高度なことを始めた場合は、必ずチェックしてくださいhttplib2。それは素晴らしい図書館です。

于 2009-12-22T21:34:44.947 に答える
1

稼働中の場合は、単に「サーバーがサービスを提供している」という意味であり、cURLを使用できます。稼働中よりも応答があった場合は、

私はPythonプログラマーではないため、具体的なアドバイスはできませんが、ここにpycurlhttp://pycurl.sourceforge.net/へのリンクがあります

于 2009-12-22T21:34:12.480 に答える
1

これにはリクエストを使用します。これは簡単でクリーンです。印刷機能の代わりに、新しい機能を定義して呼び出すことができます (電子メールで通知するなど)。ホストに到達できない場合、多くの例外が発生するため、それらをすべてキャッチする必要があるため、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}")
于 2021-01-08T12:22:16.223 に答える
0

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))
于 2016-12-06T12:33:50.677 に答える
0

この方法でウェブサイトのステータスを確認することもできます。

Import requests
def monitor():
    r = requests.get("https://www.google.com/", timeout=5)
    print(r.status_code)
于 2021-09-27T07:56:08.890 に答える