ショコラ
ユーザーエージェントの仕様がいつの間にか変わっていた。
久しぶりにクローラーを作ろうしたところ、グーグルクロームのリクエストヘッダーに見慣れないヘッダーがあった。
もっさん先輩
注目は「sec-ch-uaなんとか」と「sec-fetchなんとか」こちらを調査しました。
sec-ch-ua: "Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: cross-site
sec-fetch-user: ?1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36
sec-ch-ua は ブラウザーのブランドとバージョンです。
sec-ch-ua: "Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"
sec-ch-ua-mobile は モバイルなら ?1 。PCなら ?0 を指定します。
sec-ch-ua-mobile: ?0
sec-ch-ua-platform は OS を指定します。
sec-ch-ua-platform: "Windows"
sec-ch-ua-platform: "Android"
sec-fetchなんとか は フェッチメタデータリクエストヘッダーというもので、サーバーにリクエストがどこから来たという情報を提供し、CSRF等の悪意のあるリクエストを防ぐことができるようにするもの。
sec-fetch-dest: document
sec-fetch-mode: navigate
sec-fetch-site: cross-site
sec-fetch-user: ?1
こちらは今までのユーザーエージェントです。
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36
例
PHP で リクエストヘッダーを付けてアクセスする例。
<?php
$opts = [
'http' => [
'method' => 'GET',
'header' => [
'sec-ch-ua: "Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"',
'sec-ch-ua-mobile: ?0',
'sec-ch-ua-platform: "Windows"',
'sec-fetch-dest: document',
'sec-fetch-mode: navigate',
'sec-fetch-site: same-origin',
'sec-fetch-user: ?1',
'upgrade-insecure-requests: 1',
'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
],
'protocol_version' => '1.1',
'timeout' => 5,
]
];
$context = stream_context_create($opts);
$result = file_get_contents('https://answorz.com',false,$context);
var_dump($result);
シチュエーション
久しぶりにクローラーを作ろうしたところ、グーグルクロームのリクエストヘッダーに見慣れないヘッダーがあった。