開発用にHTTPリクエストを表示するPHPスクリプト

テストでHTTPリクエスト内容をダンプしたいので、以下のgistを参考にPHPスクリプトを開発サーバに設置。

https://gist.github.com/magnetikonline/650e30e485c0f91f2f40

phpコード

class DumpHTTPRequestToFile {

    public function execute($targetFile) {

        $data = sprintf(
            "%s %s %s\n\nHTTP headers:\n",
            $_SERVER['REQUEST_METHOD'],
            $_SERVER['REQUEST_URI'],
            $_SERVER['SERVER_PROTOCOL']
        );

        foreach ($this->getHeaderList() as $name => $value) {
            $data .= $name . ': ' . $value . "\n";
        }

        $data .= "\nRequest body:\n";

        file_put_contents(
            $targetFile,
            $data . file_get_contents('php://input') . "\n",
            FILE_APPEND | LOCK_EX
        );

        echo("<pre>\n");
        echo("$data\n\n");
        echo("</pre>\n");
    }

    private function getHeaderList() {

        $headerList = [];
        foreach ($_SERVER as $name => $value) {
            if (preg_match('/^HTTP_/',$name)) {
                // convert HTTP_HEADER_NAME to Header-Name
                $name = strtr(substr($name,5),'_',' ');
                $name = ucwords(strtolower($name));
                $name = strtr($name,' ','-');

                // add to list
                $headerList[$name] = $value;
            }
        }

        return $headerList;
    }
}


(new DumpHTTPRequestToFile)->execute('./dump.txt');

設置コマンド

$ vim index.php
$ touch dump.txt
$ chmod 666 dump.txt

表示例

GET /dev/test/ HTTP/1.1

HTTP headers:
Host: xxx.example.com
X-Real-Ip: x.x.x.x
X-Forwarded-Proto: http
Listen-Ipaddr: x.x.x.x
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: ja,en-US;q=0.9,en;q=0.8
Cookie: __utma=80399112.18719; __utmb=80399112; __utmc=80399112; __utmz=80399112.1584945883.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)

Request body:

play.google.com