我有机会更进一步,确定我连接的站点是否支持SSL(一个项目向用户询问其URL,我们需要验证他们是否已在http或https站点上安装了我们的API包)。
这是我使用的功能-基本上,只需通过cURL调用URL即可查看https是否有效!
function hasSSL($url)
{
// take the URL down to the domain name
$domain = parse_url($url, PHP_URL_HOST);
$ch = curl_init('https://' . $domain);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); //its a HEAD
curl_setopt($ch, CURLOPT_NOBODY, true); // no body
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // in case of redirects
curl_setopt($ch, CURLOPT_VERBOSE, 0); //turn on if debugging
curl_setopt($ch, CURLOPT_HEADER, 1); //head only wanted
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // we dont want to wait forever
curl_exec($ch);
$header = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($header === 200) {
return true;
}
return false;
}
这是我发现的最可靠的方法,不仅可以发现您是否正在使用https(如问题所问),而且可以确定是否可以(甚至应该)使用https。
注意:一个站点有可能(尽管不太可能...)具有不同的http和https页面(因此,如果告知您使用http,则可能不需要更改。)绝大多数站点是相同的,可能应该自己重新路由,但是这种额外的检查有其用处(肯定是我说过的,在用户输入其站点信息并且您要确保从服务器端进行确认的项目中)