[php] file_get_contents за прокси?


Answers

Используйте функцию stream_context_set_default . Это гораздо проще в использовании, поскольку вы можете напрямую использовать file_get_contents или подобные функции без каких-либо дополнительных параметров

В этом блоге объясняется, как его использовать. Вот код с этой страницы.

<?php
// Edit the four values below
$PROXY_HOST = "proxy.example.com"; // Proxy server address
$PROXY_PORT = "1234";    // Proxy server port
$PROXY_USER = "LOGIN";    // Username
$PROXY_PASS = "PASSWORD";   // Password
// Username and Password are required only if your proxy server needs basic authentication

$auth = base64_encode("$PROXY_USER:$PROXY_PASS");
stream_context_set_default(
 array(
  'http' => array(
   'proxy' => "tcp://$PROXY_HOST:$PROXY_PORT",
   'request_fulluri' => true,
   'header' => "Proxy-Authorization: Basic $auth"
   // Remove the 'header' option if proxy authentication is not required
  )
 )
);

$url = "http://www.pirob.com/";

print_r( get_headers($url) );

echo file_get_contents($url);
?>
Question

На работе мы должны использовать прокси для доступа к порту 80, например, у нас есть собственные пользовательские логины для каждого пользователя.

Мое временное обходное решение использует завиток, чтобы входить в систему как пользователь через прокси и получать доступ к внешним данным, которые мне нужны.

Есть ли какая-то расширенная настройка php, которую я могу установить так, чтобы внутри, когда она пытается вызвать что-то вроде file_get_contents() она всегда проходит через прокси? Я нахожусь в банкомате Windows, так что было бы больно перекомпилировать, если это единственный способ.

Причина моего временного решения заключается в том, что мне нужно решение, которое является общим и работает для нескольких пользователей, вместо использования учетных данных одного пользователя (Ive считал, что запрашивает отдельную учетную запись пользователя исключительно для этого, но пароли часто меняются, и этот метод необходимо развернуть на протяжении всего десяток или более сайтов). Я не хочу использовать жесткие коды в основном для использования обходного пути.




Здесь есть аналогичная статья: http://techpad.co.uk/content.php?sid=137 которой объясняется, как это сделать.

function file_get_contents_proxy($url,$proxy){

    // Create context stream
    $context_array = array('http'=>array('proxy'=>$proxy,'request_fulluri'=>true));
    $context = stream_context_create($context_array);

    // Use context stream with file_get_contents
    $data = file_get_contents($url,false,$context);

    // Return data via proxy
    return $data;

}





Related



Tags

php php   proxy