Как работать с мобильными прокси на PHP
Сегодня мы разберём 2 варианта работы PHP с мобильными прокси.
Зачем использовать мобильные прокси?
Есть несколько причин, по которым вы, возможно, захотите использовать прокси с cURL:
- Чтобы обойти региональные фильтры и загородные блоки.
- Использование прокси IP-адресов позволяет вам замаскировать или скрыть свой собственный IP-адрес.
- Для устранения проблем с сетевым подключением.
Мобильный проси на PHP через CURL
Настройка для использования с cURL и PHP относительно проста, в основном это зависит от используемого сервера и метода аутентификации (если есть). Метод аутентификации HTTP управляется параметром CURLOPT_PROXYAUTH, метод по умолчанию - CURLAUTH_BASIC - если мобильный прокси требует аутентификации, имя пользователя и пароль могут быть установлены в формате [имя пользователя]: [пароль] с помощью параметра CURLOPT_PROXYUSERPWD.
На данный момент мы просто сосредоточимся на использовании прокси, который не требует аутентификации. Установить адрес и номер порта в PHP для cURL можно с помощью параметра CURLOPT_PROXY, как показано в следующем примере:
curl_setopt($ch, CURLOPT_PROXY, '128.0.0.3:8080');
Как показано в приведенном выше примере, вы можете установить прокси с синтаксисом IP: PORT в PHP, используя cURL. Но если вы предпочитаете, чтобы IP-адрес был отделен от порта, вы также можете использовать параметр CURLOPT_PROXYPORT, что приведет к приведенному ниже коду PHP:
curl_setopt($ch, CURLOPT_PROXY, 'mproxy.site');curl_setopt($ch, CURLOPT_PROXYPORT, '8080');
После настройки прокси-сервера вы сможете выполнять запрос с помощью функции curl_exec
$ch = curl_init($url);
$url = "https://mobileproxy.space/my-ip.html";
curl_setopt($ch, CURLOPT_PROXY, 'mproxy.site');
curl_setopt($ch, CURLOPT_PROXYPORT, '8080');
$result = curl_exec($ch);
echo $result;
Установка типа мобильных прокси cURL
cURL поддерживает два типа прокси: по умолчанию - HTTP, а другой вариант - SOCKS5. Вы можете установить тип прокси, используя параметр CURLOPT_PROXYTYPE. Т.е.
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
Вам действительно нужно только установить тип прокси, если вы не используете прокси HTTP.
Установка метода аутентификации
Как упоминалось в начале руководства, установить метод аутентификации прокси-сервера можно с помощью параметра CURLOPT_HTTPAUTH. Чтобы это работало должным образом, нам также необходимо предоставить имя пользователя и пароль для прокси-сервера, все это выполняется в приведенном ниже сценарии, в котором мы просто используем метод аутентификации BASIC.
$ch = curl_init($url);
$url = "https://mobileproxy.space/my-ip.html";
curl_setopt($ch, CURLOPT_PROXY, 'mproxy.site');
curl_setopt($ch, CURLOPT_PROXYPORT, '8080');
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'USERNAME:PASSWORD');
$result = curl_exec($ch);
echo $result;
Другие методы аутентификации включают следующее:
CURLAUTH_BASIC
CURLAUTH_DIGEST
CURLAUTH_GSSNEGOTIATE
CURLAUTH_NTLM
CURLAUTH_ANY
CURLAUTH_ANYSAFE
Некоторые ошибки, которые могут возникнуть при использовании curl:
- “Failed to attach to 128.0.0.3 port 8080: Timed out” Это означает, что cURL не удалось подключиться к используемому IP-адресу и порту прокси. Убедитесь, что и IP, и порт верны, а также проверьте, правильно ли работает прокси.
- “Failed to attach to 11.22.33.44 port 1234: Connection refused” Эта ошибка обычно возникает, если вы указали неправильный номер порта, то есть IP-адрес прокси-сервера был правильным, но он не прослушивает запросы на указанном порту. Также существует вероятность того, что сервер работает, но программное обеспечение, на котором работает прокси, не работает.
- “Received HTTP code 407 from proxy after CONNECT” Комбинация имени пользователя и пароля, которую вы просто используете с CURLOPT_PROXYUSERPWD, неверна. Убедитесь, что имя пользователя и пароль верны, и вы разделяете имя пользователя и пароль двоеточием: символ.
Мобильный проси на PHP через file_get_contents
Чтобы использовать file_get_contents() через мобильный прокси-сервер, который не требует аутентификации, нужно сделать следующее:
$aContext = array( 'http' => array( 'proxy' => 'tcp://mproxy.site:8080', 'request_fulluri' => true, ),);
$cxContext = stream_context_create($aContext);
$sFile = file_get_contents("https://mobileproxy.space/my-ip.html", False, $cxContext);
echo $sFile;
Если прокси требует аутентификации, вам придется добавить пару строк, например
$auth = base64_encode('LOGIN:PASSWORD');
$aContext = array( 'http' => array( 'proxy' => 'tcp://mproxy.site:8080', 'request_fulluri' => true, 'header' => "Proxy-Authorization: Basic $auth", ),);
$cxContext = stream_context_create($aContext);
$sFile = file_get_contents("https://mobileproxy.space/my-ip.html", False, $cxContext);
echo $sFile;
На сколько нам известно, на данный момент работать file_get_contents с sock прокси не умеет.