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

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

Как мне создать скрипт прокси PHP, чтобы подделать пользовательский агент iPhone?

Ответы [ 3 ]

3 голосов
/ 09 июля 2011

Вы можете использовать класс PHP, например Простой прокси-сервер Бена Алмана / Github .

Это позволяет вам перенаправлять междоменные URL различными способами, включая следующий метод для «изменения» вашего пользовательского агента ....

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.
1 голос
/ 25 марта 2011

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

0 голосов
/ 25 марта 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'));

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

...