周辺知識

file_get_contents を使ってPOST送信

2018/06/01

WebAPIを作成するときによく利用されるのが

・file_get_contetns()関数
・curl()関数

この二つの関数です。

今回はそのうち file_get_contetns のほうを使ってPHPでPOST送信処理のコードをエントリーします。

 

サンプルソースコード

 
データを送信する側(send.php)


<?php

// 送信データ
$data = array(
    "key1" => "value1",
    "key2" => "value2"
);

// URLエンコードされたクエリ文字列を生成
$data = http_build_query($data, "", "&");

// ストリームコンテキストのオプションを作成
$options = array(
        // HTTPコンテキストオプションをセット
        'http' => array(
            'method'=> 'POST',
            'header'=> 'Content-Type: application/x-www-form-urlencoded',
            'content' => $data
        )
);

// ストリームコンテキストの作成
$context = stream_context_create($options);

// POST送信
$contents = file_get_contents('http://localhost/api/reception.php', false, $context);

// reception.php のレスポンスを表示
echo $contents;

 
データを受け取る側(reception.php)


<?php
print_r($_POST);

 
実行結果

 

解説

HTTPプロトコルのデータ(POSTデータ)をセット

フォームでいうとname属性(param1)とvalue属性(data1)の関係になります。


$data = array(
    "key1" => "value1",
    "key2" => "value2"
);

 

設定したデータ(連想配列)をエンコードしたクエリに変換

データを送信するならURLエンコードしたクエリに変換する必要があります。

例)hoge=aaa&foo=bbb

上記の配列データからクエリ文字列を生成するには、http_build_query()関数を使用します。


$data = http_build_query($data, "", "&");

http_build_query()関数について

★ 例)クエリを生成


<?php
$array = array( 'param1'=>'data1', 'param2'=>'data2', 'param3'=>'data3');
echo http_build_query( $array );

→ 実行結果


param1=data1&param2=data2&param3=data3

 

ストリームコンテキストのオプションを作成

file_get_contentsでPOST送信するにはストリームコンテキストを作成します。

ストリームコンテキストというのは簡単に言ってしまえばデータをやり取り円滑にするためのものです。

ストリームコンテキストのオプションでHTTPコンテキストのデータを連想配列でセットします。


$options = array(
        // HTTPコンテキストオプションをセット
        'http' => array(
            'method'=> 'POST',
            'header'=> 'Content-Type: application/x-www-form-urlencoded',
            'content' => $data
        )
);

HTTPコンテキストオプションの設定項目

オプション 説明 デフォルト
method GET 、 POST などのリクエストメソッド名 GET
header リクエストに付加されるヘッダ
user_agent User-Agent: ヘッダとして送信する値。 header オプションで user-agent が 定義されていない 場合のみ使用されます。 php.ini での user_agent の設定
content ヘッダの後に送信する追加データ。通常、POST または PUT リクエストの際に使用されます。

 

ストリームコンテキストの生成


$context = stream_context_create($options);

stream_context_create()関数について

ストリームコンテキストを生成するには、stream_context_create()関数を使用します。


stream_context_create( オプション )

指定したオプションから、コンテキストを生成します。
指定するオプションは配列になります。

 

file_get_contentsでPOST送信

file_get_contents()関数はファイルの内容を全て文字列に読み込む関数です。

例)ウェブサイトのホームページのソースの取得と出力


<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;

これにストリームコンテキストを操作する事で、POST送信できるようになります。

HTTPプロトコルの method に POST を指定すると、POST送信ができます。

 

送信データを表示

受け取り側のプログラム(WEB API)で print_r($_POST); にして、送信データを表示させます。

file_get_contents()関数で送信して取得したデータを $contents に代入。

それをエコーで表示させると、POST送信データを表示することができます。

なお、アクセスするページは send.php になります。reception.php に直接アクセスしてもPOST送信されないので何も表示されません。

以上です。

 

-周辺知識

close