微信公众号授权登录之php跨域请求会话curl函数返回空的解决办法

761 浏览发布于 作者 zouyang (欢迎转载-请注明出处链接)留下评论分享按钮

一、问题描述:
php实现get post请求的方法里面,这次我使用了libcurl扩展库的函数方法,定义了一个get post 请求的函数httpGet():


//定义http会话
function httpGet($url) {
	/**/
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_TIMEOUT, 500);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($curl, CURLOPT_URL, $url);

	$res = curl_exec($curl);
	curl_close($curl);

	return $res;
}

然后用此方法去跨域请求微信授权接口url地址,一直得到返回值为空。
我之前在测试服上进行测试完全没问题,查阅了相关文档,还尝试过重新生成cacert.pem证书,并添加相关代码去关联证书,再去请求访问,返回值还是为空,各种写法都尝试了,依然为空,代码肯定是没问题的。

二、解决:
搞了整整6个小时后,最后发现是正式服环境的php编译参数内带有 ‘–with-curlwrappers’,说明–with-curlwrappers被启用了,导致了返回值为空。不仅仅会导致curl函数的返回为空,即便我们使用file_get_contents($url)函数去请求接口,也是返回为空。
找到问题后,解决办法就简单了,可以去掉–with-curlwrappers参数,重新编译安装PHP即可。
我采用的办法更直接,是将H5游戏换到了另外一个php版本为5.4.45的服务器上,这台机子上是没有–with-curlwrappers参数的。至此,程序正常运行。

PS:

libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。很多php爬虫也会用到这个libcurl。
这些函数在PHP 4.0.2中被引入。默认安装好php就带有的。如果要查看是否开启curl,可以echo phpinfo();查看

想要打赏,请点击这里

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注