如何使用低级套接字函数socket_write / socket_read来处理PHP中的ssl请求?

时间:2013-01-12 12:41:01

标签: php sockets

我需要通过ssl https连接发送请求并接收响应。一个要求是仅使用低级套接字函数( NOT STREAM ),例如http://php.net/manual/en/ref.sockets.php上列出的socket_write / socket_read,socket_send / socket_recv

1 个答案:

答案 0 :(得分:0)

您可以在连接的套接字上使用方法stream_socket_enable_crypto()。要在套接字上启用ssl,有4种可能的选项取决于环境和版本。你可以尝试每一个,除非一个人工作。想象一下这个例子:

function enableCrypto($socket)
{
    $modes = array(
        STREAM_CRYPTO_METHOD_TLS_CLIENT,
        STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
        STREAM_CRYPTO_METHOD_SSLv23_CLIENT,
        STREAM_CRYPTO_METHOD_SSLv2_CLIENT
   );

   foreach ($modes as $mode) {
        if (stream_socket_enable_crypto($socket, true, $mode)) {
            return;
        }
   }

   throw new Exception('failed to enable crypto');
}

顺便说一下,该示例来自PEAR存储库的HTTP_Request2包。上面的函数与HTTP_Request2_SocketWrapper :: enableCrypto()几乎相同。您可以通过查看HTTP_Request2的源代码找到更多信息。