Создание прокси-сервера для подмены пользовательского агента iPhone на PHP?

Я пишу веб-симулятор iPhone, и я ищу способ подделать браузер iPhone Safari, чтобы веб-страницы, загруженные в симуляторе (iframe), использовали мобильные версии. Насколько я понимаю, мне нужно изменить пользовательский агент.

Как мне создать прокси-скрипт PHP для подмены пользовательского агента iPhone?


person Camsoft    schedule 24.03.2011    source источник


Ответы (3)


Вы можете использовать такую ​​библиотеку, как 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.

person alex    schedule 24.03.2011
comment
Есть ли простой способ расширить относительные URL-адреса до абсолютных или это вопрос обхода дерева DOM и изменения URL-адресов один за другим? - person Camsoft; 25.03.2011
comment
@Camsoft Вы можете угадать с str_replace(), но я бы предпочел перебрать элементы и заменить атрибуты href, src и т. Д. - person alex; 25.03.2011

Вы можете использовать класс PHP, например Простой прокси PHP Бена Алмана / 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 - с версией Google Voice для iPhone - на любую страницу, например ...

Вот некоторые из многих других способов изменить запрос с помощью этого скрипта:

   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.
person Alex Gray    schedule 08.07.2011

Если вы хотите подделать заголовки для своих конечных пользователей, то использование надстройки браузера, изменяющей агент пользователя, не вариант. Я предлагаю написать простой PHP-скрипт, которому вы передаете URL-адрес для извлечения, и сделать PHP-запрос cURL для этого 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'));

Я думаю, это должно сработать, но это мгновенно убьет ваш сервер ...

person Imi Borbas    schedule 24.03.2011