2008-12-18 28 views
31

我用这个来检查URL的可用性:找不到插座运输“https”开头

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

,我得到这个错误回来...

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

我正在使用IIS服务器btw,(没有它不是我的!)所以我认为它没有open-ssl,但我不确定。任何人都可以帮忙吗?

我做了一个phpinfo(),我确实有ssl,但是在IMAP和cURL上,这就是所有。

任何想法?

回答

12

还为SSL,你需要使用SSL的前缀主持人://

+0

这才是真正的答案,但tvanfosson澄清它: ) – Jay 2008-12-19 12:28:57

26

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

Manual page for fsockopen。看例1。

45

取消对该行:extension=php_openssl.dllphp.ini

0

安装检查卷曲或不为PHP。如果未安装,请安装卷曲。 窗户注释该行:在php.ini中扩展= p​​hp_openssl.dll, 为Ubuntu sudo易于得到安装PHP卷曲

2

比方说,你要抢纽约时报,它强制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。

+1

很难想象9年前我在和IIS作战,从过去爆炸... – 2017-02-20 13:31:11

0

切换到ssl://为我工作,但我不断收到一个坏请求响应。我发现,我需要增加一个行明确宣布我的主机头描述here,并确保我已经更新从HTTP/1.0我的HTTP到HTTP/1.1

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