Python requests の接続エラーとタイムアウトエラー

Python の requests ライブラリを使って Web API を叩くクライアントソフトを作ってるんだけど、接続時のタイムアウト処理をしようと思って、

    try:
        res = requests.post('https://127.0.0.1:3000/', data={'data': data}, stream=True, timeout=(3.0, 7.5))
    except requests.exceptions.ConnectTimeout:
        print('Requests.POST Timeout ' + data)
        return(901)
    else:
        print('Success' + data)
        return(res.status_code)
    finally:
        pass

こんな風に書いてたんだけど、サーバを立ち上げていない状態で一向にタイムアウト例外が発生しない。

んん???と思って、

    except requests.exceptions.RequestException as e:
        print(str(e))
        return(909)

と全部の requets 関係の例外を引っ掛けてみたら、

httpConnectionPool(host='127.0.0.1', port=3000): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.httpConnection object at 0x000000000523AE48>: Failed to establish a new connection: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。'))

だって。そうか、そうか。接続先のサーバにそもそも接続できない時は、レスポンス待ちにもなっていないわけだから、接続タイムアウトエラーではなく接続エラーなんだな。

というわけで、接続エラーを引っ掛ける

    except requests.exceptions.ConnectionError:
        print('Requests.POST ConnectionError ' + data)
        return(901)

という例外処理も追加しておかねばな。サーバが落ちてるんか、立ち上がっているけど反応が遅いのかわからんからな。

トラックバック(0)

このブログ記事を参照しているブログ一覧: Python requests の接続エラーとタイムアウトエラー

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5530

コメントする

このブログ記事について

このページは、shinodaが2020年2月 2日 11:37に書いたブログ記事です。

ひとつ前のブログ記事は「J(S)W の 30周年記念ライブ」です。

次のブログ記事は「北中山子ども神楽が素晴らしかった」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら