tanaka's Programming Memo

プログラミングについてのメモ。

PHPで簡単にPOSTする

PHPUnitのテストなどで、手っ取り早くPOSTする時の関数。PHPの公式ページのサンプルなどを参考にしました。

PHP: file_get_contents - Manual

<?

/**
 * @param string $url 送信先のURL
 * @param array $sendarray 送信する連想配列
 *
 * @return array response=戻ってきたページの情報 / http_response_header=レスポンスヘッダ
 */
function postUrl($url, $sendarray)
{
    $data_url = http_build_query($sendarray);
    $data_len = strlen($data_url);

    $res = file_get_contents(
        $url,
        false,
        stream_context_create(array(
            'http' => array(
                'method' => 'POST',
                'header' => "Content-Type: application/x-www-form-urlencoded\r\nContent-Length: $data_len\r\n",
                'content' => $data_url,
            ),
        ))
    );

    return array(
        'response' => $res,
        'http_response_header' => $http_response_header,
    );
}


// 利用サンプル
// 送信先に、$_POST['data1']に'test1'、$_POST['data2']に'test2'を渡す
// 戻り値のレスポンスヘッダーの1行目と本文を表示
$send = array(
    'data1'=>'test1',
    'data2'=>'test2'
);
$res = postUrl("http://www.example.com", $send);
echo "code = ".$res['http_response_header'][0]."\n";
echo "resp = ".$res['response']."\n";