[解決済み] Pythonで、利用可能でアクティブなネットワーク接続があるかどうかを確認するにはどうすればよいですか?
2022-04-26 11:56:33
質問
オンラインAPIにアクセスできるかどうかを確認したいのですが、そのためにはインターネットにアクセスする必要があります。
Pythonを使って、接続が可能かどうか、アクティブかどうかを確認するにはどうすればよいですか?
どのように解決するのですか?
おそらく、次のようなものが使えると思います。
import urllib2
def internet_on():
try:
urllib2.urlopen('http://216.58.192.142', timeout=1)
return True
except urllib2.URLError as err:
return False
現在、216.58.192.142はgoogle.comのIPアドレスの1つです。
変更
http://216.58.192.142
を、迅速な対応が期待できるサイトであれば何でもよい。
.
この固定IPは永遠にgoogle.comにマッピングされることはないでしょう。ですから、このコードは 堅牢ではない -- 動作を維持するためには常にメンテナンスが必要です。
上記のコードで完全修飾ドメイン名(FQDN)ではなく、固定IPアドレスを使用している理由は、FQDNを使用するとDNSルックアップが必要になるためです。マシンがインターネットに接続されていない場合、DNS検索自体が
urllib_request.urlopen
を1秒以上続ける。このことを指摘してくれた@rzetterbergに感謝します。
上記の固定IPアドレスがうまくいかない場合、google.comの現在のIPアドレスは(unixの場合)以下を実行することで見つけることができます。
% dig google.com +trace
...
google.com. 300 IN A 216.58.192.142
関連
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] リストを反転させるには?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python関数の高度な応用を解説
-
python call matlab メソッドの詳細
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない