当前位置:  编程技术>php

php使用curl访问https示例分享

    来源: 互联网  发布时间:2014-08-26

    本文导语:  为方便说明,先上代码吧 代码如下:/**  * curl POST  *  * @param   string  url  * @param   array   数据  * @param   int     请求超时时间  * @param   bool    HTTPS时是否进行严格认证  * @return  string  */  function curlPost($url, $data = arr...

为方便说明,先上代码吧

代码如下:

/**
 * curl POST
 *
 * @param   string  url
 * @param   array   数据
 * @param   int     请求超时时间
 * @param   bool    HTTPS时是否进行严格认证
 * @return  string
 */ 
function curlPost($url, $data = array(), $timeout = 30, $CA = true){   

    $cacert = getcwd() . '/cacert.pem'; //CA根证书 
    $SSL = substr($url, 0, 8) == "https://" ? true : false; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout-2); 
    if ($SSL && $CA) { 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书 
        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布) 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配 
    } else if ($SSL && !$CA) { 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名 
    } 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); //避免data数据过长问题 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode 

    $ret = curl_exec($ch); 
    //var_dump(curl_error($ch));  //查看报错信息 

    curl_close($ch); 
    return $ret;   
}   

如果URL地址是https打头,那就走SSL,否则就走普通的HTTP协议。

是否走HTTPS的话就安全了吗?其实SSL也有不同的验证程度。

例如需不需要验证证书中的公用名呢?(BTW:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。)

需要验证主机名吗?

是任何证书都信任呢还是只信任CA颁布的呢?

(我擦嘞,电池快没点了,只捡关键地儿说了 - -|||)

如果网站SSL证书买的是CA的(通常比较贵),那么访问时可以使用比较严格的认证,即:

代码如下:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书
curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配

如果网站的证书是自己生成的,或者是网上的小机构申请的,那么访问时如果使用严格认证则不会通过,直接返回false。(对了,返回false时可以打印curl_error($ch)查看具体错误信息。)此时可以根据情况通过降低验证程度来保证正常访问,例如:

代码如下:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)

平时我们使用浏览器访问各个https网站时,有时会遇到证书不受信的提示,其实就是因为这些网站的证书不是正规CA机构颁布的。

市面上各种浏览器中都内置了CA根证书列表信息,访问有CA颁布证书的网站时,会根据根证书验证这些网站的证书,所以就不会有这个提示了。

关于CA根证书文件,其实就是包含了各个主要CA机构的公钥证书,用来验证网站的证书是否是这些机构颁发的。

这里的这个文件是来源于mozilla的源码树,又转换成PEM格式证书文件。(大家可以到这里下载现成的http://curl.haxx.se/ca/cacert.pem)

最后说一个和SSL无关的东西:

代码如下:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

这个主要是为了解决POST时数据过长问题


    
 
 

您可能感兴趣的文章:

  • php通过socket_bind()设置IP地址代码示例
  • php循环创建目录示例分享(php创建多级目录)
  • PHP获取php,mysql,apche的版本信息示例代码
  • php定义数组和使用示例(php数组的定义方法)
  • php输出奇数偶数示例
  • php递归示例 php递归函数代码
  • php生成数组的使用示例 php全组合算法
  • php分割数组示例
  • php数组随机排序示例
  • PHP 强制下载文件示例代码
  • php动态生成函数示例
  • php输入流php://input使用示例(php发送图片流到服务器)
  • php循环创建多级目录示例
  • php二维数组转换为字符串示例
  • php求两个目录的相对路径示例(php获取相对路径)
  • PHP数组根据值获取Key的简单示例
  • php比较绝对时间的大小示例
  • php cli换行示例
  • 设置php页面编码的两种方法示例介绍
  • php类声明和php类使用方法示例分享
  • PHP邮箱地址正确性验证示例
  • 如何使用crontab来定时执行一个.php的程序 iis7站长之家
  • php mvc使用htaccess隐藏index.php
  • php使用socket_bind()函数绑定IP地址
  • php导入excel php使用phpexcel导入excel文件
  • 如何使用crontab来定时执行一个.php的程序
  • 使用php检测用户当前使用的浏览器是否为IE浏览器
  • 怎么样在JSP中使用PHP的变量呀??
  • 使用Linux/UNIX的系统用户进行PHP用户登录验证
  • php 使用system() 调用c程序的问题
  • php跨域cookie共享使用方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php判断正常访问和外部访问的示例
  • php如何限制ip访问
  • php访问控制面试题一例
  • php判断手机访问还是电脑访问示例分享
  • 如何用php实现IP访问限制
  • linux下的php文件放在哪个文件夹下才能访问
  • php检测用户是否用手机(Mobile)访问网站
  • linux 下用unixODBC FreeTDS php访问SQL Server
  • 我的测试页是正常了.可是我的php页面为什么访问不了.总是You don't have permission to access /test.php on this server.
  • PHP限制IP访问 只允许指定IP地址访问
  • php检测用户是否用手机(Mobile)访问网站的类
  • php判断电脑访问、手机访问的例子
  • 限制ip地址段访问用php如何实现
  • img标签添加php文件记录页面访问数据
  • php出现内存位置访问无效错误问题解决方法
  • PHP根据IP地址限制用户访问
  • PHP如何限制页面只能在微信自带浏览器访问?
  • PHP 登录完成跳转上一访问页面
  • PHP限制页面只能在微信自带浏览器访问的代码
  • PHP限制IP段访问实现代码
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • PHP转换器 HipHop for PHP
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP 框架 Pop php
  • PHP去除html标签,php标记及css样式代码参考
  • PHP的JavaScript框架 PHP.JS
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • php服务器探针显示php服务器信息
  • php安装完成后如何添加mysql扩展


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3