1 2 3 4 5 6 7 8 9 10 |
if ( !class_exists( 'WP_Http' ) ) { include_once( ABSPATH . WPINC . '/class-http.php' ); } $http = new WP_Http(); $response = $http->request( $url ); if ( is_wp_error($response) || $response['response']['code'] != 200 ) { var_dump( $response ); } |
こんな感じで画像ファイルを取得していたんですが、何故か取得できていないものがあり、手動実行してみたところ、上記の var_dump() で以下のようなエラーが。
1 2 3 4 5 6 7 8 |
object(WP_Error) (2) { ["errors"]=> array(1) { ["http_request_failed"]=> array(1) { [0]=> string(97) "cURL error 28: Operation timed out after 5000 milliseconds with 66696 out of 69933 bytes received" } } ["error_data"]=> array(0) { } } |
cURL リクエストがタイムアウトしている模様。
デフォルトは5000ミリ秒のようです。
対応策としては以下の2つ。
リクエストを発している箇所(修正したい箇所)が1箇所なら、
1 |
$response = $http->request( $url, array( 'timeout' => 10 ) ); |
複数箇所でのリクエストをまとめて対応させたければ、
1 2 3 |
add_filter( 'http_request_timeout', function ( $timeout ) { return 10; } ); |
どちらも単位はミリ秒ではなく秒。
後者の場合、もちろんそのプロセス中でのWP_HTTPからのHTTPリクエスト全部に影響するので注意。
このあたりをソース探索しました。
/wp-includes/class-http.php
/wp-includes/class-http.php
/wp-includes/Requests/Transport/cURL.php