
已解决问题
谷歌xnsbb用户在2016.04.20提交了关于“宝马x1php使用curl访问https示例分享”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-03-01T23:43:23。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,千言万语,表达不了我的感激之情,我已铭记在心 !
详细问题描述及疑问:期待您的答案,千言万语,表达不了我的感激之情,我已铭记在心 !
为方便说明,先
复制代码代码如下:
/**
*curlPOST
*
*@p
*@parama
*@paramint请求超时时间
*@paramboolh**
*@returnstring
*/
functioncurlPost($url,$data=array(),$
$
$SSL=substr($url,0,8)=="https://"?true:false;
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$
curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
c
i
curl
c
curl_setopt($c
}elseif($SSL&&!$CA){
curl_setopt($ch,CURLOPT_SSL_VE
curl_setopt($ch,CURLO
}
curl_setopt($ch,CURLOPT_RETUR
curl_setopt($ch,
curl
cur
//c
$ret=curl_exec($c
//var_d
c
return$re
}
如果URL地址是h
是否走h**TTPS的话就安全了吗?其实SSL也有不同的验程度。
例如需不需要验**中的公用名呢?(**W:公用名(CommonName)一般来讲就是填写你将要申请SSL**的域名(domain)或子域名(subdomain)。)
需要验主机名吗?
是任何**都信任呢还是只信任CA颁布的呢?
(我擦嘞,电池快没点了,只捡关键地儿说了--|||)
如果网站SSL**买的是CA的(通常比较贵),那么访问时可以使用比较严格的认,即:
复制代码代码如下:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true);//只信任CA颁布的**
curl_setopt($ch,CURLOPT_CAINFO,$cacert);//CA根**(用来验的网站**是否是CA颁布)
curl_setopt($ch,CURLOPT_SSL_VERIFYh**OST,2);//检查**中是否设置域名,并且是否与提供的主机名匹配
如果网站的**是自己生成的,或者是网上的小机构申请的,那么访问时如果使用严格认则不会通过,直接返回false。(对了,返回false时可以打印curl_error($ch)查看具体错误信息。)此时可以根据情况通过降低验程度来保正常访问,例如:
复制代码代码如下:
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);//信任任何**
curl_setopt($ch,CURLOPT_SSL_VERIFYh**OST,1);//检查**中是否设置域名(为0也可以,就是连域名存在与否都不验了)
平时我们使用浏览器访问各个https网站时,有时会遇到**不受信的提示,其实就是因为这些网站的**不是正规CA机构颁布的。
市面上各种浏览器中都内置了CA根**列表信息,访问有CA颁布**的网站时,会根据根**验这些网站的**,所以就不会有这个提示了。
关于CA根**文件,其实就是包含了各个主要CA机构的公钥**,用来验网站的**是否是这些机构颁发的。
这里的这个文件是来源于mozilla的源码树,又转换成PEM格式**文件。(大家可以到这里下载现成的http://curl.***.se/ca/cacert.pem)
最后说一个和SSL无关的东西:
复制代码代码如下:
curl_setopt($ch,CURLOPT_h**TTPh**EADER,array('Expect:'));
这个主要是为了解决POST时**过长问题