1

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

4

1 回答 1

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 的源代码找到更多信息。

于 2013-01-12T13:21:27.053 回答