35

我正在使用它来检查 URL 的可用性:

$fp = fsockopen($url, 443, $errno, $errstr);

我得到了这个错误......

警告:fsockopen() [function.fsockopen]:无法连接到https://example.com/soapserver.php:443(无法找到套接字传输“https” - 您在配置 PHP 时是否忘记启用它? ) 在 C:\Home 等...

顺便说一句,我正在使用 IIS 服务器,(不,这不是我做的!)所以我认为这与没有 open-ssl 有关,但我不确定。有人可以帮忙吗?

我做了一个 phpinfo() 并且我确实有 ssl,但在 IMAP 和 cURL 上,仅此而已。

有任何想法吗?

4

6 回答 6

47

取消注释该行:extension=php_openssl.dllphp.ini

于 2011-01-30T19:17:30.073 回答
29

您应该只使用主机名,而不是 fsockopen 调用中的 URL。您需要提供 uri,减去实际 HTTP 标头中的主机/端口。正如@Martijin 所指出的,并且如手册页中所列,如果使用传输层安全性,您需要在您的主机名前加上 ssl:// 或 tls:// 来表示 SSL。

fsockopen 的手册页。查看示例 #1。

于 2008-12-18T17:33:26.237 回答
16

同样对于 ssl,您需要在主机前加上 ssl://

于 2008-12-18T17:41:27.843 回答
4

假设您想获取强制 HTTPS 的 NY Times:

不正确:

$client = stream_socket_client('https://www.nytimes.com', $errno, $errstr, 30);

正确的:

$client = stream_socket_client('tcp://www.nytimes.com:443', $errno, $errstr, 30);

请注意,我已将 443 端口替换https://并附tcp://加到主机名。

我想我们可以说它stream_socket_client()不会说 URL。

于 2017-02-19T12:49:17.243 回答
2

切换到ssl://为我工作,但我一直收到 BAD REQUEST 响应。我发现我需要再添加一行来明确声明我的主机头,如此处所述,并确保我已将我的 HTTP 从更新HTTP/1.0HTTP/1.1

$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n";
于 2017-05-19T18:15:58.987 回答
0

检查是否为 php 安装了 curl。如果未安装,请安装 curl。对于 windows 取消注释行:extension=php_openssl.dll in php.ini,对于 ubuntu sudo apt-get install php-curl

于 2017-01-11T11:22:42.013 回答