web-dev-qa-db-ja.com

PHP curl接続タイムアウトエラー

私はPHPでcurlを使用してAPIを呼び出しています。時々うまく動作し、時々_Failed to connect to api-domain.com port 80: Connection timed out_を取得します

時々それが機能していることとそうでないことは少し奇妙です。 curl_getinfo()が機能していないときに印刷した問題のトラブルシューティングを行うには、以下を確認してください。

接続時間= 0および合計時間= 130秒を示していますが、それが何を意味するのかよくわかりません。誰かがそれについてよく理解しているなら、以下のログを確認して、正確な問題が何であるかを理解するのを助けてください。

_[url] => http://api-domain.com/?act=get_story_banners
[content_type] => text/html; charset=UTF-8
[http_code] => 200
[header_size] => 630
[req   uest_size] => 283
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 130.335916
[namelookup_time] => 0.000016
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 744
[speed_download] => 13814
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[redirect_url] => 
[primary_ip] => 34.231.133.7
[certinfo] => Array()
[primary_port] => 80
[local_ip] => xxx.xxx.xxx.xxx
[local_port] => 48080
_

少し早いですがお礼を!

編集

時々、カールリクエストはREST APIサーバーに届きますが、届かない場合があります。接続レベル自体で破棄され、REST APIサーバーに届きません。なぜ時々接続し、時には接続しないのかについては少し混乱しています。

11
Irfan.gwb

1週間ほど苦労し、提案されたすべてのオプションを試したところ、接続の問題でもAPI api-domain.comの問題でもないことがわかりました。私にとっては少し奇妙ですが、APIを呼び出しているのはサーバースケーリングの問題であり、構成(RAMとCPU)を増やして、問題が修正されていることがわかりました。

この問題に関する私の経験が誰かを助け、トラブルシューティングの時間を節約することを願っています。

解決策についてコメントと提案をしてくださった皆様、ありがとうございます。

1
Irfan.gwb

curl_getinfo() のドキュメントを参照すると、_connect_time_は最後の接続を確立するのにかかった秒数であり、_total_time_は最後のトランザクションの秒数です。

curl_setopt() を使用してタイムアウトを再定義できます。たとえば、curl_setopt($cHandler, CURLOPT_CONNECTTIMEOUT, 42);は42秒のconnectionタイムアウトを設定するか、curl_setopt($cHandler, CURLOPT_CONNECTTIMEOUT, 0);を設定しないconnectionタイムアウト。同様に、curl_setopt($cHandler, CURLOPT_TIMEOUT, 42);は42秒のexecutionタイムアウトを定義します。

6
Cid