Не удалось найти транспортный сокет https

Я использую это, чтобы проверить наличие 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, вот и все.

Любые идеи?


person Chris J Allen    schedule 18.12.2008    source источник


Ответы (6)


также для ssl вам нужно добавить к хосту префикс ssl: //

person Martijn Laarman    schedule 18.12.2008
comment
Это реальный ответ, но tvanfosson разъяснил его :) - person Jay; 19.12.2008

Раскомментируйте строку: extension=php_openssl.dll в php.ini

person Sérgio    schedule 30.01.2011
comment
Нужно ли мне что-нибудь делать с php (извините, что я новичок в php) после того, как я отредактировал этот файл? Спасибо. - person uudaddy; 07.10.2020
comment
Только что понял, что эта строка предназначена для Windows (dll) и не относится к Linux, который я использую. - person uudaddy; 07.10.2020

Вы должны использовать только имя хоста, а не URL-адрес в вызове fsockopen. Вам нужно будет указать uri за вычетом хоста / порта в фактических заголовках HTTP. Как отметил @Martijin и как указано на странице руководства, вам нужно будет указать перед именем хоста ssl: // для SSL или tls: //, если используется безопасность транспортного уровня.

Справочная страница для fsockopen. Посмотрите на пример №1.

person tvanfosson    schedule 18.12.2008

Предположим, вы хотели получить NY Times, которая поддерживает HTTPS:

Неправильно:

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

Правильный:

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

Примечание. Я заменил https:// на tcp:// и добавил порт 443 к имени хоста.

Я думаю, мы можем сказать, что stream_socket_client() не использует URL-адреса.

person The Onin    schedule 19.02.2017
comment
@Chris J Allen, должно быть, были отчаянными временами - person The Onin; 20.02.2017

У меня сработало переключение на ssl://, но я продолжал получать ПЛОХОЙ ЗАПРОС. Я обнаружил, что мне нужно добавить еще одну строку для явного объявления моего заголовка хоста, как описано в здесь и убедитесь, что я обновил свой HTTP с HTTP/1.0 на HTTP/1.1:

$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n";
person Tony Schmidt    schedule 19.05.2017

Проверьте, установлен ли curl для php. если он не установлен, установите завиток. для Windows раскомментируйте строку: extension = php_openssl.dll в php.ini, для ubuntu sudo apt-get install php-curl

person S.Abbu    schedule 11.01.2017