POSTのリクエストをそのまま別URLに飛ばす

Webhook等で受け取ったPOSTリクエストを処理する機能を作ったが、とある事情で直接POSTを受け取ることができない事象が発生した。

DNSのTTL消化までの時間や、SSLのバージョンによって今後も類似のケースが発生しそうなのでメモ。

ただ、明らかに好ましい手段ではないので、最終手段かつ一時的な対策とする。

尚、この記事のコードのままだと、POSTが無害化されてなくて非常に危険なので、一般公開されたサーバーでは利用しないでください。

ステップ通常今回
1origin.example.comorigin.example.com
2receive.example.comrelay.example.com
3receive.example.com
originからreceiveに直接POSTすると失敗する。relayを中継して、originからのPOSTをそのままreciveに渡して、レスポンスを返す

<?php
// POSTデータを受け取る
$data = array_map('htmlspecialchars', $_POST);

$options = array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-type: application/x-www-form-urlencoded',
        'content' => http_build_query($data)
    )
);
$context = stream_context_create($options);

// HTTPSリクエストを送信して結果を取得
$result = file_get_contents('https://example.com/path', false, $context);

// 結果を表示
echo $result;
?>

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください