前回の「HTTP API」について、実際のコードを書いて動作させて検証してみます。
まず、「wp_remote_get」について書いてみます。
プラグイン内の任意の箇所に以下のようなコードを書きました。(URLはダミーに置き換えています)
//HTTP APIのテスト $url = "http://hogefuga.fuga/"; $response = wp_remote_get($url, $args);
このコードを実行し、$responseの値をvar_dumpで内容を見ると、以下のような結果が返ってきます。
長いですが、全て記載します。
Array ( [headers] => Requests_Utility_CaseInsensitiveDictionary Object ( [data:protected] => Array ( [date] => Fri, 02 Mar 2018 15:04:02 GMT [server] => Apache [expires] => Thu, 19 Nov 1981 08:52:00 GMT [cache-control] => no-store, no-cache, must-revalidate, post-check=0, pre-check=0 [pragma] => no-cache [set-cookie] => PHPSESSID=1b6419888d849d81ce51d2cec9ddd499; path=/ [vary] => Accept-Encoding,User-Agent [content-encoding] => gzip [content-type] => text/html; charset=UTF-8 ) ) [body] => [response] => Array ( [code] => 200 [message] => OK ) [cookies] => Array ( [0] => WP_Http_Cookie Object ( [name] => PHPSESSID [value] => 1b6419888d849d81ce51d2cec9ddd499 [expires] => [path] => / [domain] => hogefuga.fuga ) ) [filename] => [http_response] => WP_HTTP_Requests_Response Object ( [response:protected] => Requests_Response Object ( [body] => [raw] => HTTP/1.1 200 OK Date: Fri, 02 Mar 2018 15:04:02 GMT Server: Apache Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: PHPSESSID=1b6419888d849d81ce51d2cec9ddd499; path=/ Vary: Accept-Encoding,User-Agent Content-Encoding: gzip Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 [headers] => Requests_Response_Headers Object ( [data:protected] => Array ( [date] => Array ( [0] => Fri, 02 Mar 2018 15:04:02 GMT ) [server] => Array ( [0] => Apache ) [expires] => Array ( [0] => Thu, 19 Nov 1981 08:52:00 GMT ) [cache-control] => Array ( [0] => no-store, no-cache, must-revalidate, post-check=0, pre-check=0 ) [pragma] => Array ( [0] => no-cache ) [set-cookie] => Array ( [0] => PHPSESSID=1b6419888d849d81ce51d2cec9ddd499; path=/ ) [vary] => Array ( [0] => Accept-Encoding,User-Agent ) [content-encoding] => Array ( [0] => gzip ) [content-type] => Array ( [0] => text/html; charset=UTF-8 ) ) ) [status_code] => 200 [protocol_version] => 1.1 [success] => 1 [redirects] => 0 [url] => http://hogefuga.fuga/ [history] => Array ( ) [cookies] => Requests_Cookie_Jar Object ( [cookies:protected] => Array ( [PHPSESSID] => Requests_Cookie Object ( [name] => PHPSESSID [value] => 1b6419888d849d81ce51d2cec9ddd499 [attributes] => Requests_Utility_CaseInsensitiveDictionary Object ( [data:protected] => Array ( [path] => / [domain] => hogefuga.fuga ) ) [flags] => Array ( [creation] => 1520003042 [last-access] => 1520003042 [persistent] => [host-only] => 1 ) [reference_time] => 1520003042 ) ) ) ) [filename:protected] => [data] => [headers] => [status] => ) )
これはサーバから返された結果になり、全ての結果情報が格納されているようです。
この中にはレスポンスヘッダやHTMLのbody内の文字列(上記の結果からは削除してあります)、などのコンテンツデータも取得できました。
この結果に対し、wordpressでは結果内容を簡単に解析するヘルパー関数があるようです。
ヘルパー関数の例を記載します。
//本文を取得 wp_remote_retrieve_body() //ヘッダの値を取得 wp_remote_retrieve_header() //全てのヘッダ情報を取得 wp_remote_retrieve_headers() //ステータスコードを取得 wp_remote_retrieve_response_code() //ステータスメッセージを取得 wp_remote_retrieve_response_message()
上記のどの命令を使うかは、場面により異なりますが、
まず、検証の為に「wp_remote_retrieve_header()」を使ってみます。
先ほど冒頭で書いた「wp_remote_get」の結果に対し、使ってみます。
//HTTP APIのテスト $url = "http://hogefuga.fuga/"; $response = wp_remote_get($url, $args); //ここで使用する $header_value = wp_remote_retrieve_header($response, "date");
第二引数の「date」は、取得したいヘッダーの項目名を指定しています。別の項目名でもOKです。
この処理を実行した際、「$header_value」の変数には
Fri, 02 Mar 2018 15:20:49 GMT
等という値が取得されています。
本来であれば、ヘッダーの値を取得する前に、ステータスチェック等を行い、その上で値を取得する。等の対策が必要になってきます。