file_get_contents за прокси?

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

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

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

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

65 голосов | спросил meder omuraliev 26 PM00000090000001831 2009, 21:14:18

4 ответа


0

Чтобы использовать file_get_content через /через прокси, который не требует аутентификации, нужно сделать что-то вроде этого:

(я не могу проверить это: мой прокси-сервер требует аутентификации)

$aContext = array(
    'http' => array(
        'proxy' => 'tcp://192.168.0.2:3128',
        'request_fulluri' => true,
    ),
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("http://www.google.com", False, $cxContext);

echo $sFile;

Конечно, заменив IP и порт моего прокси на те, которые вам подойдут; -)

Если вы получаете такую ​​ошибку:

Warning: file_get_contents(http://www.google.com) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 407 Proxy Authentication Required

Это означает, что ваш прокси-сервер требует аутентификации.

Если прокси-сервер требует аутентификации, вам нужно добавить пару строк, например:

$auth = base64_encode('LOGIN:PASSWORD');

$aContext = array(
    'http' => array(
        'proxy' => 'tcp://192.168.0.2:3128',
        'request_fulluri' => true,
        'header' => "Proxy-Authorization: Basic $auth",
    ),
);
$cxContext = stream_context_create($aContext);

$sFile = file_get_contents("http://www.google.com", False, $cxContext);

echo $sFile;

То же самое с IP и портом, а также LOGIN и PASSWORD; -)

Теперь вы проходите прокси-авторизацию заголовок прокси, содержащий ваш логин и пароль.

И ... Страница должна отображаться; -)

ответил Pascal MARTIN 26 PM00000090000000631 2009, 21:47:06
0

Используйте функцию 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);
?>
ответил Pirob.com 11 J000000Thursday13 2013, 22:59:52
0

В зависимости от того, как работает вход через прокси-сервер, stream_context_set_default может помочь вам.

$context  = stream_context_set_default(
  array(
    'http'=>array(
      'header'=>'Authorization: Basic ' . base64_encode('username'.':'.'userpass')
    )
  )
);
$result = file_get_contents('http://..../...');
ответил VolkerK 26 PM00000090000004331 2009, 21:34:43
0

Здесь есть похожий пост: 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;

}
ответил Paul 7 72010vEurope/Moscow11bEurope/MoscowSun, 07 Nov 2010 22:36:00 +0300 2010, 22:36:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132