PHP实现捕获HTTPS内容
最近在学习黑客新闻API的时候遇到了一个HTTPS问题。由于所有的黑客新闻API都是通过加密的HTTPS协议访问的,不同于普通的HTTP协议,在使用PHP中的函数file_get_contents()获取API中提供的数据时,会出现一个错误,使用的代码如下:
?PHP $ data=file _ get _ contents(' https://hacker-news . fire baseio.com/v 0/tops tors . JSON?print=漂亮');运行上述代码时,我遇到了以下错误提示:
PHP警告: file_get_contents():找不到包装器‘https’——配置PHP时是不是忘记启用了?以下是截图:
为什么会有这样的错误?
在网上搜索了一下,发现有不少人遇到过这样的错误。问题很直接,因为PHP配置文件中没有参数,在我电脑的/apache/bin/php.ini中;扩展名=php_openssl.dll,需要删除之前的分号。您可以使用以下脚本来检查您的PHP环境的配置:
$ w=stream _ get _ wrappers();echo 'openssl: ',extension_loaded ('openssl ')?yes':'no ',' \ n ';echo 'http wrapper: ',in_array('http ',$w)?yes':'no ',' \ n ';echo 'https wrapper: ',in_array('https ',$w)?yes':'no ',' \ n ';echo ' wrappers: ',var _ dump($ w);运行上面的脚本片段,在我的机器上的结果是:
OpenSSL : nohttp wrapper : yes https wrapper : nowrapper :数组(10){[0]=string(3)' PHP '[1]=string(4)' file '[2]=string(4)Glob '[3]=string(4)' data '[4]=string(4)' http '[5]=string(3)' FTP '[6]=string(3)' zip '[7]=string(13)' compress . zlib '[
发现和纠正错误非常简单。困难在于发现错误后无法改正。我原本想在远程主机上使用这个脚本方法,但是无法修改远程主机的PHP配置。因此,我不能使用这个方案,但我们不能把自己挂在树上。这条路行不通。看看有没有别的办法。
我在PHP中经常使用的另一个抓取内容的函数是curl,它比file_get_contents()更强大,并且提供了许多可选参数。对于访问HTTPS内容的问题,我们需要使用的CURL配置参数是:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);您可以从语义上看到,它忽略/跳过了SSL安全身份验证。也许这不是一个好的做法,但对于普通场景来说,这就足够了。
以下是Curl封装的可以访问HTTPS内容的函数:
函数getHTTPS($ URL){ $ ch=curl _ init();curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_HEADER,false);curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);curl_setopt($ch,CURLOPT_URL,$ URL);curl_setopt($ch,CURLOPT _ REFERER,$ URL);curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);$ result=curl _ exec($ ch);curl _ close($ ch);返回$ result}以上是php获取https内容的全过程,非常简单实用,推荐给项目要求相同的小伙伴。
版权声明:PHP实现捕获HTTPS内容是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。