1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHPでのcurlリトライ。エラー番号やメッセージで判定する。

Posted at

概要

API通信では、HTTPのレスポンスがエラーとなり失敗してしまうことがあります。
API通信を再度実行することで、復帰ができる可能性がある場合、curl実行のリトライが有効でしょう。

本記事では、実際にリトライ処理を実装した際に参考にした文献と、追加で検討した内容について述べます。

結論

cURL retry in PHP

  • 下記判定により、リトライをするかどうかを判断する。
    • PHPの標準ライブラリにあるcurl_errnoを用いてエラー種別を確認。
    • (採用)PHPの標準ライブラリにあるcurl_errorを用いてエラー文言を確認。

エラー文言をリトライ処理の判定に組み込んだ理由

TCP connection reset by peerのエラーメッセージが返される場合にリトライを行う実装にしたかったので、そのエラーメッセージが返ってくる時のエラー番号で判定しようと考えていました。
しかしながら、エラーメッセージとエラー番号の関係は必ず一意になるとは限らないようでした。
また、今回は特定のエラーメッセージが返された時にリトライしたいというニーズだったので、それならエラーメッセージだけで判定すれば良さそう、ということでエラー文言をリトライ処理の判定に組み込む判断をしました。

さいごに

API通信をリトライする実装をするとなった時、とりあえず全部リトライしてしまえば〜のお気持ちでした。
状況によってはそれでも良いと思います。
ただし、リアルタイム性が問われるアプリケーションの場合、何度もsleepをかけて遅延が大きくなってしまうと大変かもなので、いい塩梅を考えないといけないな、と思いました。

参考文献

https://stackoverflow.com/questions/6080369/curl-retry-in-php
https://www.php.net/manual/ja/function.curl-errno.php
https://www.php.net/manual/ja/function.curl-error.php

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?