2016-12-24 3 views
3

Я не уверен, как настроить параметр контекста потока для прокси-сервера tcp для потокового сокета в php. Я нашел и протестировал следующий код, но он не работает для потокового сокета.Как создать контекстный массив для набора носков 5 или http proxy для php stream_socket_client

$context = stream_context_create(
      array(
       'http'=>array(
       'proxy'=> 'tcp://'.$proxy,     
       ) 
      ) 
      ); 
$srvHandle = stream_socket_client("tcp://{$this->server}", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context); 
if ($srvHandle === false) 
    $this->LogError("failed to connect with host website, check your network connection."); 
stream_set_blocking($srvHandle, true); 
stream_socket_enable_crypto($srvHandle, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); 
stream_set_blocking($srvHandle, false); 

Но контекст работает для функции file_get_contents.

$context = stream_context_create(
      array(
       /* 
       'socket' => array(
        'bindto' => $proxy, 
       )  
       */ 
       'http'=>array(
       'proxy'=> 'tcp://'.$proxy, 
       "request_fulluri" => TRUE, 
       ), 
       "ssl" => array(
       "SNI_enabled" => FALSE, 
       ) 
      ) 
      ); 

$result = file_get_contents("http://api.ipify.org?format=json", false, $context); 

Поэтому я могу знать, что контекст работает только для протокола http.

Как настроить массив параметров контекста для сокета tcp stream?

ответ

0

Вы можете использовать потоки, в соответствии с вашим примером вам нужен потоковый сокет клиента.

Посмотрите на stream_socket_client, чтобы создать разъем tcp. Обратите внимание на последний параметр, $context, который должен быть создан с использованием stream_context_create.

Есть достаточно в руководствах примеры, но здесь о том, как использовать его

$context = stream_context_create(
      array(
       /* 
       'socket' => array(
        'bindto' => $proxy, 
       )  
       */ 
       'http'=>array(
       'proxy'=> 'tcp://'.$proxy, 
       "request_fulluri" => TRUE, 
       ), 
       "ssl" => array(
       "SNI_enabled" => FALSE, 
       ) 
      ) 
      ); 

$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30, ini_get("default_socket_timeout"), STREAM_CLIENT_CONNECT, $context); 

Также отметим, что fopen также принимает контекст, и работает с TCP потоками тоже. Функции расширения потока предоставляют больше возможностей, но для базового использования должно быть достаточно fopen.

+0

Благодарим вас за ответы. –