WordPress

HTTP APIについての検証

前回の「HTTP API」について、実際のコードを書いて動作させて検証してみます。

まず、「wp_remote_get」について書いてみます。

プラグイン内の任意の箇所に以下のようなコードを書きました。(URLはダミーに置き換えています)
[php]
//HTTP APIのテスト
$url = "http://hogefuga.fuga/";
$response = wp_remote_get($url, $args);
[/php]

このコードを実行し、$responseの値をvar_dumpで内容を見ると、以下のような結果が返ってきます。
長いですが、全て記載します。
[php]
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] =>
)

)
[/php]

これはサーバから返された結果になり、全ての結果情報が格納されているようです。

この中にはレスポンスヘッダやHTMLのbody内の文字列(上記の結果からは削除してあります)、などのコンテンツデータも取得できました。

この結果に対し、wordpressでは結果内容を簡単に解析するヘルパー関数があるようです。

ヘルパー関数の例を記載します。

[php]
//本文を取得
wp_remote_retrieve_body()

//ヘッダの値を取得
wp_remote_retrieve_header()

//全てのヘッダ情報を取得
wp_remote_retrieve_headers()

//ステータスコードを取得
wp_remote_retrieve_response_code()

//ステータスメッセージを取得
wp_remote_retrieve_response_message()
[/php]

上記のどの命令を使うかは、場面により異なりますが、
まず、検証の為に「wp_remote_retrieve_header()」を使ってみます。

先ほど冒頭で書いた「wp_remote_get」の結果に対し、使ってみます。
[php]
//HTTP APIのテスト
$url = "http://hogefuga.fuga/";
$response = wp_remote_get($url, $args);

//ここで使用する
$header_value = wp_remote_retrieve_header($response, "date");
[/php]

第二引数の「date」は、取得したいヘッダーの項目名を指定しています。別の項目名でもOKです。

この処理を実行した際、「$header_value」の変数には
[php]
Fri, 02 Mar 2018 15:20:49 GMT
[/php]
等という値が取得されています。

本来であれば、ヘッダーの値を取得する前に、ステータスチェック等を行い、その上で値を取得する。等の対策が必要になってきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です