Я пишу веб-симулятор iPhone, и я ищу способ подделать браузер Safari для iPhone, чтобы веб-страницы, загруженные в симулятор (iframe), использовали мобильные версии. По моему мнению, мне нужно изменить пользовательский агент.
Как мне создать скрипт PHP-прокси, чтобы подделать пользовательский агент iPhone?
Вы можете использовать библиотеку, такую как cURL, чтобы запросить страницу с помощью пользовательского агента iPhone и вернуть эту страницу на свой сайт (не забудьте расширить относительные URL-адреса до абсолютного с помощью DOMDocument).
Тем не менее, вы можете столкнуться с крайними случаями, когда CSS / JavaScript / изображения обслуживаются по-разному через пользовательский агент. Это, вероятно, не стоит запрашивать каждый из этих активов вовремя. Вы можете ограничить работу, запросив один раз своим пользовательским агентом, а затем пользовательским агентом iPhone, выполнив md5_file()
и посмотрев, отличаются ли они. Я бы не стал беспокоиться: P
Вы также можете попробовать этот JavaScript …
navigator.__defineGetter__('userAgent', function(){ return 'foo' // customized user agent }); navigator.userAgent; // 'foo'
Источник .
Также помните, что вы можете дать предупреждение, если ваши пользователи не используют Safari, который будет наиболее близким к моделированию Mobile Safari.
Вы можете использовать класс PHP, такой как простой PHP-прокси Ben Alman / Github .
Это позволит вам перенаправлять междоменные URL-адреса различными способами, в том числе следующий способ «изменить» ваш User Agent …
user_agent - This value will be sent to the remote URL request as the `User-Agent:` HTTP request header. If omitted, the browser user agent will be passed through.
Я использую его, чтобы вставить iFrame – с iPhone-версией google voice – на любую страницу, например …
Некоторые из многих других способов, которыми вы можете изменить запрос, используя этот скрипт, – это …
url - The remote URL resource to fetch. Any GET parameters to be passed through to the remote URL resource must be urlencoded in this parameter. mode - If mode=native, the response will be sent using the same content type and headers that the remote URL resource returned. If omitted, the response will be JSON (or JSONP). <Native requests> and <JSONP requests> are disabled by default, see <Configuration Options> for more information. callback - If specified, the response JSON will be wrapped in this named function call. This parameter and <JSONP requests> are disabled by default, see <Configuration Options> for more information. send_cookies - If send_cookies=1, all cookies will be forwarded through to the remote URL request. send_session - If send_session=1 and send_cookies=1, the SID cookie will be forwarded through to the remote URL request. full_headers - If a JSON request and full_headers=1, the JSON response will contain detailed header information. full_status - If a JSON request and full_status=1, the JSON response will contain detailed cURL status information, otherwise it will just contain the `http_code` property.
Если вы хотите обманывать заголовки для ваших конечных пользователей, то использование агента пользователя, изменяющего надстройку браузера, не является вариантом. Мое предложение состоит в том, чтобы написать простой PHP-скрипт, на который вы передаете URL-адрес, который нужно извлечь, и сделать запрос cURL PHP к этому URL-адресу, но заранее вы должны установить заголовок User Agent со следующим вызовом:
curl_setopt($ch,CURLOPT_HTTPHEADER,array('User-Agent: Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3'));
Я думаю, что это должно сработать, но он мгновенно убьет ваш сервер …