web-dev-qa-db-ja.com

ソケットトランスポート「https」が見つかりません

私はこれを使用してURLの可用性を確認しています:

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

そして、私はこのエラーを取り戻します...

警告:fsockopen()[function.fsockopen]:接続できません https://example.com/soapserver.php:44 (ソケットが見つかりませんtransport "https"-PHPの設定時に有効にするのを忘れましたか?)C:\ Homeなどで...

私はIIS server btw、(私はそうではありません!)お願いします?

私はphpinfo()を実行しましたが、sslがありますが、IMAPとcURLではそれだけです。

何か案は?

35
Chris J Allen

sslの場合も、ホストの先頭にssl://を付ける必要があります

14
Martijn Laarman

行のコメントを外します:extension=php_openssl.dll in php.ini

46
Sérgio

Fsockopen呼び出しのURLではなく、ホスト名のみを使用する必要があります。実際のHTTPヘッダーのHost/portを差し引いたuriを提供する必要があります。 @Martijinが指摘したように、またマニュアルページにリストされているように、トランスポートレイヤーセキュリティを使用する場合は、SSLの場合はssl://を、ホスト名の前に付ける必要があります。

マニュアルページ fsockopenの場合。例1を見てください。

29
tvanfosson

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);

注_https://_を_tcp://_に置き換え、ホスト名に443ポートを追加しました。

stream_socket_client()はURLを話さないと言えると思います。

3
Nino Škopac

ssl://への切り替えはうまくいきましたが、引き続きBAD REQUEST応答を受け取りました。 here のようにホストヘッダーを明示的に宣言し、HTTPをHTTP/1.0からHTTP/1.1に更新したことを確認するには、もう1行追加する必要があることがわかりました。

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

PHPのcurlがインストールされているかどうかを確認します。インストールされていない場合は、カールをインストールします。 Windowsの場合:php.iniのextension = php_openssl.dllの行のコメントを外します。ubuntuの場合はsudo apt-get install php-curl

0
S.Abbu