解决file_get_contents无法请求https连接的方法

PHP.ini默认配置下,用file_get_contents读取https的链接,就会报如下错误,本文给出解决方法

错误: Warning: fopen() [function.fopen]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?

解决方案有3:

1.windows下的PHP,只需要到php.ini中把extension=php_openssl.dll前面的;删掉,重启服务就可以了。

2.linux下的PHP,就必须安装openssl模块,安装好了以后就可以访问了。

3.如果服务器你不能修改配置的话,那么就使用curl函数来替代file_get_contents函数,当然不是简单的替换啊。还有相应的参数配置才能正常使用curl函数。

对curl函数封装如下:

复制代码代码如下:

function http_request($url,$timeout=30,$header=array()){  
        if (!function_exists(‘curl_init‘)) {  
            throw new Exception(‘server not install curl‘);  
        }  
        $ch = curl_init();  
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
        curl_setopt($ch, CURLOPT_HEADER, true);  
        curl_setopt($ch, CURLOPT_URL, $url);  
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);  
        if (!emptyempty($header)) {  
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  
        }  
        $data = curl_exec($ch);  
        list($header, $data) = explode("\r\n\r\n", $data);  
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
        if ($http_code == 301 || $http_code == 302) {  
            $matches = array();  
            preg_match(‘/Location:(.*?)\n/‘, $header, $matches);  
            $url = trim(array_pop($matches));  
            curl_setopt($ch, CURLOPT_URL, $url);  
            curl_setopt($ch, CURLOPT_HEADER, false);  
            $data = curl_exec($ch);  
        }

if ($data == false) {  
            curl_close($ch);  
        }  
        @curl_close($ch);  
        return $data;  
}

时间: 2024-10-10 14:41:28

解决file_get_contents无法请求https连接的方法的相关文章

file_get_contents无法请求https连接的解决方法 php开启curl

file_get_contents无法请求https连接的解决方法 方法1: PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误: Warning: fopen() [function.fopen]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? 解决方案有3:1.windows下的PHP,只需要到php.i

斯坦福iOS7公开课11笔记及演示Demo&&访问HTTPS连接下载数据

这一节主要介绍UITableView以及iPad,Demo为从Flicker下载图片并显示,但是实际过程中发现需要FQ并使用HTTPS连接,所以这次用了两个Demo,一个是课程中的Demo,另一个是简化的. 最后调试过程中还找到Xcode中观察变量的一个小技巧.     一.UITableView UITableView是iOS中最常用的表视图,通讯录中的联系人.手机设置里的每一个选项都是表视图中的一个单元格cell,微信.微博每一条记录其实也是一个cell,只不过是组成要素更多一些而已. (1

记录一次解决httpcline请求https报handshake_failure错误

概述 当使用httpclinet发起https请求时报如下错误: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174) at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:1

连接池(理论上应该是任意连接池) 、spring方法切入、 mybatis 、 redis等待请求 用了mysql连接的方法阻塞超过8小时导致mysql关闭连接 应用复活后用了已关闭连接而异常

服务进程中的服务方法blpop阻塞在redis队列下(等待请求),  使用方(客户代码)向该队列push请求以促使服务方法在阻塞的代码行继续运行下去. 服务方法使用了mybatis的SqlSessionTemplate, 在进入服务方法时spring为mybatis调用了连接池druid的getConnection, 假设很久没有请求来,一直阻塞在blpop处,直到mysql的wait_timeout默认8小时到达(导致mysql实际上已经关闭了该连接), 而此时处在方法内部, 一旦有请求来,代

解决Chrome浏览器访问https提示“您的连接不是私密连接”的问题

安装fiddler后,使用Chrome访问https网站时,可能会出现以下错误,本文说明如何解决此类问题: "您的连接不是私密连接"."NET::ERR_CERT_AUTHORITY_INVALID"."ERR_CERT_COMMON_NAME_INVALID"或"NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM" Step 1: 找到Chrome浏览器的快捷方式,选中该快捷方式,按下鼠标右键,在弹

python3.7 urlopen请求HTTPS警告'CERTIFICATE_VERIFY_FAILED'解决办法

环境: Mac 10.13.6 python3.7 代码 from urllib.request import urlopen html = urlopen('https://en.wikipedia.org/wiki/Kevin_Bacon',) 报错如下urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749) , 大概意思是证书(c

tomcat7.0.55配置单向和双向HTTPS连接

HTTPS配置中分为单向连接和双向连接,单向连接只需要服务器安装证书,客户端不需要,双向连接需要服务器和客户端都安装证书 一.单向HTTPS连接 检查命令行当前工作目录(C:\Users\test\)下的有无.keystore文件,如果有,则删除. 先测试两个keytool命令 1.keytool -help 结果如下 C:\Users\test>keytool -help 密钥和证书管理工具 命令: -certreq 生成证书请求 -changealias 更改条目的别名 -delete 删除

struct和class的区别 观察者模式 https连接 点击button收到点击事件,中间发生了什么

问题: 4道过滤菜鸟的iOS面试题 网上已经有很多针对各种知识点的面试题,面试时有些人未必真正理解也能通过背题看上去很懂.我自己总结了4道面试题,好快速的判断这个人是否是一个合格的工程师,欢迎大家点评. 1.struct和class的区别 在面试之前你觉得所有的计算机专业的学生都应该能答的上来,事实是我面的人里有超过三分一没有答上来. 有时我还会顺便问下swfit里的array是什么类型,在大量复制时会不会有性能问题. 2.介绍一下观察者模式 也许有些人已经觉得设计模式有些过时,没有整本读过.就

php请求远程url内容方法

php请求远程url内容有两个方法fopen/file_get_contents和curl. 1,fopen/file_get_contents与curl的差异 (1)fopen /file_get_contents 每次请求都会重新做DNS查询,并不对DNS信息进行缓存.但是CURL会自动对DNS信息进行缓存.对同一域名下的网页或者图片的请求只需要一次DNS查询.这大大减少了DNS查询的次数.所以CURL的性能比fopen /file_get_contents 好很多.(2)fopen /fi