本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
這案例就像是正在開發一個 Web Hook 端的應用,他文件寫一堆,但還是實際看到送過來的東西比較實在,對吧?
這時候「存起來」或「印出來」就是最棒的拉!
剛剛找到一個網友分享他寫的紀錄請求方式,滿完整的如下:
Gist: Link
class DumpHTTPRequestToFile {
public function execute($targetFile) {
$data = sprintf(
"%s %s %snnHTTP headers:n",
$_SERVER['REQUEST_METHOD'],
$_SERVER['REQUEST_URI'],
$_SERVER['SERVER_PROTOCOL']
);
foreach ($this->getHeaderList() as $name => $value) {
$data .= $name . ': ' . $value . "n";
}
$data .= "nResponse body:n";
file_put_contents(
$targetFile,
$data . file_get_contents('php://input') . "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('./dumprequest.txt');
我修改如他那Gist下方討論建議把 echo「Done」的部分移除,畢竟在實戰除錯階段不需要把「完成除錯」當作內容一起吐吧?XD
使用時要注意 file_put_contents
在操作寫檔動作時會需要有對應權限,而權限給伺服器的使用者與群組就好囉!
查找方式為:
ps aux | egrep '(apache|httpd|nginx)'
看向如圖的最右側就會看到使用者(我這邊舉例為 Nginx 的使用者為 www
)
改變寫入檔案權限的指令如下:
chown www:www /path/to/file
自行改路徑即可!(也要注意下指令時的權限是否正確哦)
以上,在看開發時要把這檔案在哪個請求前面引用就好拉~ 紀錄的資訊像下面這格式,很清楚!
GET /dumprequest.php HTTP/1.1
HTTP headers:
Host: localhost
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36
Referer: http://localhost/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Response body: