【PHP】curlの実行速度が遅い

    

何気なくcurlを使用してwebAPIの読み込み処理を実装したところ、特定のAPIが20秒程度とやたら時間がかかるという現象が発生しました。

全てのAPIの実行速度が遅いわけではないので、DNSの名前解決の時間やサーバのスペック不足といった問題ではないのではないかという推測はあったのですが、原因は実装コードのこれでした。


curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Content-Length: " . strlen($sendData)));
curl_setopt($curl, CURLOPT_POSTFIELDS , $sendData );

content-Lengthの設定と実際送信する容量と差異がある場合(実際の送信バイト数がcontent-lengthの指定値より小さい場合)サーバがcontent-lengthの容量までデータが送信されてくることを待つ場合がらしく、APIのレスポンスが悪い原因はこれでした。content-lengthの指定をやめたところ良好なレスポンスを返すようになりました。

contents-lenthを指定する場合は実際の送信データと見比べて正確にカウントして指定するようにしましょう。