[PHP]file_get_contents()でユーザエージェントを偽装する
Read More
最近では同一のURLをたたいても、アクセスしてきたユーザエージェントの情報によって最適なページを切り替えて表示させているサイトが多い。
こんなときfile_get_contents()を使ってweb上にあるモバイルページやスマホページを取得するにはどうしたらよいか。
■file_get_contents()でユーザエージェントを偽装する
stream_context_create()を利用してやることで、file_get_contents()でアクセスするときのヘッダー情報を書き換えることができる。
これによりユーザエージェントを指定したものに偽装することができる。
注意)
file_get_contents()を使ってwebページを取得するにはphp.iniのallow_url_fopenディレクティブがOnになっている必要がある
ソースコード
上記の例ではURLに対しユーザエージェントの上ではドコモのモバイルとしてアクセスしていることになる。
またこれ以外の方法としてcURL関数を使っても、同じようにユーザエージェントを偽装してwebページを取得することができる。
■cURL関数でユーザエージェントを偽装する
cURL関数で指定できるオプションの中に、stream_context_create()でやったのと同じように、別のユーザエージェントを指定することができる。
※cURL関数はphp.iniの拡張モジュールphp_curl.dllが有効になっている必要がある
ソースコード
上記の例もfile_get_contents()と同じ内容が帰ってくる。
file_get_contens()もcURL関数もそれぞれphp.iniの設定に左右されるのでサーバの状況に応じて使い分けたい。
それぞれの設定が有効になっているかどうかを調べるにはphpinfo()やextension_loaded()、ini_get()などを使えばよい。
こんなときfile_get_contents()を使ってweb上にあるモバイルページやスマホページを取得するにはどうしたらよいか。
■file_get_contents()でユーザエージェントを偽装する
stream_context_create()を利用してやることで、file_get_contents()でアクセスするときのヘッダー情報を書き換えることができる。
これによりユーザエージェントを指定したものに偽装することができる。
注意)
file_get_contents()を使ってwebページを取得するにはphp.iniのallow_url_fopenディレクティブがOnになっている必要がある
ソースコード
$options = array( 'http' => array( 'method' => 'GET', 'header' => 'User-Agent: DoCoMo/2.0 P903i(c100;TB;W24H12)', ), ); $context = stream_context_create($options); $url = 'http://xirasaya.com/'; $contents = file_get_contents($url, false, $context); print $contents;
上記の例ではURLに対しユーザエージェントの上ではドコモのモバイルとしてアクセスしていることになる。
またこれ以外の方法としてcURL関数を使っても、同じようにユーザエージェントを偽装してwebページを取得することができる。
■cURL関数でユーザエージェントを偽装する
cURL関数で指定できるオプションの中に、stream_context_create()でやったのと同じように、別のユーザエージェントを指定することができる。
※cURL関数はphp.iniの拡張モジュールphp_curl.dllが有効になっている必要がある
ソースコード
$ch = curl_init(); $options = array( CURLOPT_URL => 'http://xirasaya.com/', CURLOPT_HEADER => false, CURLOPT_NOBODY => false, CURLOPT_RETURNTRANSFER => true, CURLOPT_USERAGENT => 'User-Agent: DoCoMo/2.0 P903i(c100;TB;W24H12)', ); curl_setopt_array($ch, $options); $contents = curl_exec($ch); print $contents;
上記の例もfile_get_contents()と同じ内容が帰ってくる。
file_get_contens()もcURL関数もそれぞれphp.iniの設定に左右されるのでサーバの状況に応じて使い分けたい。
それぞれの設定が有効になっているかどうかを調べるにはphpinfo()やextension_loaded()、ini_get()などを使えばよい。
Comments(2)
Category "PHP" の最新記事
- [解決済]Windows10環境でAmazonS3にアップしたファイルをunlinkするとPermission deniedのエラーが発生する (0)
- [PHP] 文字列の前後の全角スペースを取り除くには (0)
- JSON内で扱えるデータ型の種類 (0)
- [PHP]FuelPHPでRequestクラスのレスポンス内容がおかしくなる (0)
- [PHP]null値ならデフォルト値を返すifnull()の使い方 (0)
- [PHP]効率よくFTP上のファイルの存在を確認する方法 (0)
- [PHP]効率よくFTP上のファイル情報を取得する方法 (0)
- シェルで文字に色を付ける方法と色の種類 (0)
- [PHP]フォルダパスの末尾のスラッシュを削除する (0)
- [PHP]ZipArchiveクラスを使ってzipファイルを作成する (0)
どんなPCやスマホのブラウザでも見られるサイトを目指すとか…
ぐぐってみた所、出力するHTMLを1つだけ持ってて
CSS3の機能を利用して画面の横幅を確認。
→○○px未満ならスマホ用のCSSを適用
→○○px以上ならPC用のCSSを適用
ところがHTMLの仕様として、
スマホだからPC用として書かれた箇所は「display:none;」指定しても、
画像を読み込まれる事には変わりないし、
画面の幅に関係ない=でかい画像を読み込む為ファイルサイズが常に膨大となる。
読み込むCSSだって増えるし、判別処理だって増えてしまう。
しかもIE8や9はCSS3の対応が甘い為に切り捨てる事になってしまう。
…概念は素晴らしいけど、欠点も多いので様子見という所ですね。
暫くの間はユーザエージェントを利用するのが正解だと思います。
使い回しができるならそれに越したことないもんな。
凝ったことせずに安くあげたいのならいいかもねー