当前位置:  编程技术>php

php curl访问https实现代码

    来源: 互联网  发布时间:2014-10-09

    本文导语:  curl是利用URL语法在命令行方式下工作的开源文件传输工具。 分享一个php使用curl访问https的例子。 代码:   代码示例: /**  * curl POST  *  * @param   string  url  * @param   array   数据  * @param   int     请求超时时间 ...

curl是利用URL语法在命令行方式下工作的开源文件传输工具。
分享一个php使用curl访问https的例子。

代码:
 

代码示例:

/**
 * 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.fmt
  • PHP去除html标签,php标记及css样式代码参考
  • php质数算法代码 php除法求质数
  • php session_id()函数介绍及代码实例
  • PHP获取php,mysql,apche的版本信息示例代码
  • php将html特殊字符转换成html字符串的函数:htmlspecialchars()介绍及代码举例
  • php判断字符串是否存在 php字符串检测代码
  • php实现socket实现客户端和服务端数据通信源代码
  • php 质数计算代码 PHP筛选法求质数
  • php获取访客ip地址原理及提供七段代码供参考
  • php解压文件代码实现php在线解压
  • php微博短网址算法 php生成短网址的实现代码
  • PHP 代码加密工具 HCache
  • php递归示例 php递归函数代码
  • 我已经用源代码方式安装了apache,如何让它支持php和mysql(php没有安装,mysql安装的是rpm包),要不要重新安装apache?如何删除已有的ap
  • 执行PHP代码的虚拟机 HHVM
  • centos服务器定时执行一段php代码
  • PHP代码编辑环境 PHPanywhere
  • PHP 强制下载文件示例代码
  • php获取字段名的代码
  • PHP实现Unicode和Utf-8互相转换
  • PHP实现的AMQP php-amqplib
  • php通过pack和unpack函数实现对二进制数据封装及解析
  • php通过数组实现多条件查询实现方法(字符串分割)
  • php过滤html中网站链接 php实现域名白名单功能
  • PHP快速排序小例子 php快速排序实现方法
  • PHP实现获取图片颜色值的方法
  • php 通配符实现方法
  • php实现的九九乘法口诀表简洁版
  • PHP扩展实现的框架 ZoeeyPHP
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • php判断正常访问和外部访问的示例
  • php如何限制ip访问
  • php访问控制面试题一例
  • php判断手机访问还是电脑访问示例分享
  • 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段访问实现代码
  • linux 中apache2+php5+mysql4,访问时出现Forbidden 的问题
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)
  • PHP 5.4.19 和 PHP 5.5.3 发布及下载地址
  • php输入流php://input使用示例(php发送图片流到服务器)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • PHP转换器 HipHop for PHP
  • PHP 'ext/soap/php_xml.c'不完整修复存在多个任意文件泄露漏洞
  • PHP 框架 Pop php
  • php安装完成后如何添加mysql扩展
  • PHP的JavaScript框架 PHP.JS
  • PHP的substr() 函数用法


  • 站内导航:


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

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

    浙ICP备11055608号-3