HTTP APIについての検証

WordPress

前回の「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

等という値が取得されています。

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

コメントを残す

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