如何为php stream_socket_客户端的set socks 5或http代理创建上下文数组
我不确定如何在php中为流套接字的tcp代理配置流上下文参数。我发现并测试了以下代码,但它不适用于stream Socket如何为php stream_socket_客户端的set socks 5或http代理创建上下文数组,php,sockets,tcp,proxy,Php,Sockets,Tcp,Proxy,我不确定如何在php中为流套接字的tcp代理配置流上下文参数。我发现并测试了以下代码,但它不适用于stream Socket $context = stream_context_create( array( 'http'=>array( 'proxy'=> 'tcp://'.$proxy, ) )
$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\u get\u 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流套接字配置上下文参数数组?您可以使用流,根据您的示例,您需要一个客户端流套接字 查看以创建tcp套接字。请注意最后一个参数,
$context
,该参数应使用创建
手册中有足够的例子,但这里是关于如何使用它的
$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);
还要注意的是,它也接受上下文,并且也适用于tcp流。流扩展函数提供了更多选项,但对于基本用途而言,
fopen
应该足够了。感谢您的回答。stream\u socket\u client()完全忽略了代理上下文。@tim我在该页面或stream\u socket\u client
中找不到关于在上下文中忽略代理的任何内容。你能指出它吗?页面列出了支持哪些参数。我只是尝试为代理设置一个值,但在PHP7.2中它被完全忽略了。@tim我明白了。我不记得用过,所以也许你是对的。谢谢