ユーザーエージェントの仕様がいつの間にか変わっていた。

ショコラ
ショコラ

ユーザーエージェントの仕様がいつの間にか変わっていた。

久しぶりにクローラーを作ろうしたところ、グーグルクロームのリクエストヘッダーに見慣れないヘッダーがあった。

もっさん先輩
もっさん先輩

注目は「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);

シチュエーション

久しぶりにクローラーを作ろうしたところ、グーグルクロームのリクエストヘッダーに見慣れないヘッダーがあった。

Scroll to Top