您的位置:首页 > 理论基础 > 计算机网络

PHP curl https访问问题

2016-03-25 12:00 531 查看
PHPcurlhttps访问问题,原代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*@StringurlURL地址

*@ArraydataPOST数据

*@ResourcecurlcURL对象

*@returninfo返回信息

*/

$curl
=curl_init();
//启动一个cURL会话

curl_setopt(
$curl
,CURLOPT_URL,
$url
);
//要访问的地址

curl_setopt(
$curl
,CURLOPT_HEADER,0);
//返回header部分

curl_setopt(
$curl
,CURLOPT_HTTPHEADER,
array
(
"Content-Type:application/xml"
));

curl_setopt(
$curl
,CURLOPT_RETURNTRANSFER,1);
//返回字符串,而非直接输出

curl_setopt(
$curl
,CURLOPT_USERAGENT,
$_SERVER
[
'HTTP_USER_AGENT'
]);
//模拟用户使用的浏览器

curl_setopt(
$curl
,CURLOPT_POST,1);
//发送一个常规的Post请求

curl_setopt(
$curl
,CURLOPT_POSTFIELDS,
$data
);
//Post提交的数据包

curl_setopt(
$curl
,CURLOPT_TIMEOUT,30);
//设置超时限制防止死循环

$info
=curl_exec(
$curl
);
//执行操作并返回数据

curl_close(
$curl
);
//关闭cURL会话


https访问错误,加入了cURL查看错误方法curl_error()

1
2
$error
=curl_error(
$curl
);
//需放在curl_close($curl)执行之前

var_dump(
$error
);


返回的错误信息为:


SSLcertificateproblem,verifythattheCAcertisOK


HTTPS协议服务器进行SSL验证的问题

解决方法有多种,可以将HTTPS改为使用HTTP协议(可行的情况下),也可以通过cURL选项设置为禁止验证(推荐):

1
2
curl_setopt(
$curl
,CURLOPT_SSL_VERIFYHOST,0);

curl_setopt(
$curl
,CURLOPT_SSL_VERIFYPEER,FALSE);


参看PHP手册中关于cURL选项的描述:PHP:curl_setopt


CURLOPT_SSL_VERIFYPEER
禁用后cURL将终止从服务端进行验证。使用
CURLOPT_CAINFO
选项设置证书使用
CURLOPT_CAPATH
选项设置证书目录如果
CURLOPT_SSL_VERIFYPEER
(默认值为2)被启用,
CURLOPT_SSL_VERIFYHOST
需要被设置成
TRUE
否则设置为
FALSE
CURLOPT_SSL_VERIFYHOST
1检查服务器SSL证书中是否存在一个公用名(commonname)。译者注:公用名(CommonName)一般来讲就是填写你将要申请SSL证书的域名(domain)或子域名(subdomain)。2检查公用名是否存在,并且是否与提供的主机名匹配。

注意按手册规定:

CURLOPT_SSL_VERIFYPEER属于应该被赋予一个bool类型值的选项;

CURLOPT_SSL_VERIFYHOST属于应该被赋予一个integer的选项。

更改之后问题就解决了。

值得一提的是,当cURL出现错误和问题时,curl_exec()将返回FALSE,可以使用上面提到的curl_error()方法输出错误原因。此方法必须在curl_close()之前使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航