php - 如何让 SSL 在 fsockopen 中工作?

标签 php ssl openssl fsockopen

我在 Windows 上运行 PHP 5.2.6,我在 php.ini 中取消注释 extension=php_curl.dllextension=php_openssl.dll;因此,我可以在 phpinfo 中看到以下内容:

curl
cURL support        enabled
cURL Information    libcurl/7.16.0 OpenSSL/0.9.8g zlib/1.2.3

openssl
OpenSSL support     enabled
OpenSSL Version     OpenSSL 0.9.8g 19 Oct 2007

我不确定启用 cURL 对此是否至关重要,但由于它提到了 OpenSSL,我想我还是将其包含在此处以确保完整性。


我想做的很简单:使用 fsockopen 通过 SSL 向另一台服务器发出 POST 请求。
到目前为止我的代码是这样的:

$host = 'www.redacted.com';
$data = 'user=redacted&pass=redacted&action=redacted';
$response = "";

if ( $fp = fsockopen("ssl:{$host}", 443, $errno, $errstr, 30) ) {

    $msg  = 'POST /wsAPI.php HTTP/1.1' . "\r\n";
    $msg .= 'Content-Type: application/x-www-form-urlencoded' . "\r\n";
    $msg .= 'Content-Length: ' . strlen($data) . "\r\n";
    $msg .= 'Host: ' . $host . "\r\n";
    $msg .= 'Connection: close' . "\r\n\r\n";
    $msg .= $data;
    if ( fwrite($fp, $msg) ) {
        while ( !feof($fp) ) {
            $response .= fgets($fp, 1024);
        }
    }
    fclose($fp);

} else {
    $response = false;
}

当然,如果我只是传入 $host 并使用端口 80,这当然可以正常工作。但我确实需要通过 SSL 发送它,但现在它无法正常工作。 $response 设置为 false$errno 保持在 0$errstr 设置为 php_network_getaddresses: getaddrinfo failed: No such host is known.。我知道这不是服务器宕机或主机名拼写错误等问题,因为如果我不安全地访问端口 80,它确实有效。只有当我尝试切换到 SSL 时,问题才会出现。

我该怎么做才能让它发挥作用?

最佳答案

这听起来很明显,但您尝试过吗?

if ($fp = fsockopen('ssl://'. $host, 443, $errno, $errstr, 30)) {

我不确定是否需要//,但是PHP Internet Transports page 上的ssltls 示例有他们。

附言我还有一个关于字符串中包含的变量的“事情”,以防你想知道为什么它现在使用字符串连接。

关于php - 如何让 SSL 在 fsockopen 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1757957/

相关文章:

php - 无法连接到 iSeries odbc

c# - 在 HTTPS 请求期间验证远程 SSL 证书

python - OpenSSL s_client 和 Python SSL 模块在主机名证书上存在分歧

openssl - 使用 socat 和 openssl 作为 DTLS/PSK 隧道

php - 在Mysql和PHP "Access denied for user '中编辑记录页面'@'localhost'到数据库 'linkyoutube''

php - MySQL INSERT IGNORE 向非索引列添加 1

php - 如何使用 PDO 和 MySQL 在多个表中插入 INSERT INTO?

asp.net - 集成两个 ASP.NET 站点的最佳方式

ssl - GitHub 桌面/Git 外壳 : SSL read: error:00000000:lib(0):func(0):reason(0), 错误号 10054

ubuntu - 在启用压缩的情况下发送 Openssl 客户端问候