前回の「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
等という値が取得されています。
本来であれば、ヘッダーの値を取得する前に、ステータスチェック等を行い、その上で値を取得する。等の対策が必要になってきます。