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)
という例外処理も追加しておかねばな。サーバが落ちてるんか、立ち上がっているけど反応が遅いのかわからんからな。
コメントする