【PHP】file_get_contentsにユーザーエージェントやリファラを設定
file_get_contents関数で外部サイトのコンテンツを取得するとき、デフォルトでは
- ユーザーエージェント(UA)
- リファラ(参照元)
が設定されていません。
サイトによってはそれらの情報が設定されていないとアクセスが弾かれたり、データをぶっこ抜くのを拒否される場合があります。
ここでは、file_get_contents関数にユーザーエージェントやリファラを設定する方法を説明します。
ユーザーエージェントやリファラを設定
検索から来た人が素早く解決できるように最初にコピペで使えるコードを載せます。
<?php
//コンテンツ取得先
$url = "";
//ヘッダーの設定
$header = array(
"Content-Type: application/x-www-form-urlencoded",
"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0",
"Referer: https://ysklog.net"
);
//オプション設定
$options =array(
'http' =>array(
'method' => "GET",
'header' => implode("\r\n", $header),
)
);
//コンテンツ取得
$contents = file_get_contents($url, false, stream_context_create($options));
//出力
print_r($contents);
?>
これを使えばユーザーエージェントとリファラが設定され相手ページにて次のように認識されます。
【ユーザーエージェント】
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
【リファラ】
https://ysklog.net
もしfile_get_contents関数でコンテンツの取得に失敗した場合、相手ページにてユーザーエージェントとリファラをチェックされている可能性があるので、上記のようにユーザーエージェントを持たせれば取得できるかもしれません。
ユーザーエージェントの設定
上のコードをみてわかるように、設定方法はいたって簡単です。
stream_context_create関数を用いてヘッダー情報に次のコードを記述するだけです。
"User-Agent: **********"
リファラの設定
リファラもまったく同じように、ヘッダー情報に次のコードを記述するだけです。
"Referer: https://**********"
偽装し放題
お気づきの人もいるかと思いますが、ユーザーエージェントとリファラは任意のものを使用できるので偽装し放題です。
表現は悪いですが、欲しいデータを好き放題ぶっこ抜けるってことですね。
逆に言うならば、自分がWebサービスを運営するのであれば、UAと参照元を信用してはならないということになります(セッションの利用やトークン発行などで対策が必要)。
あわせて読んでほしい!
コメント
まだコメントはありません。