php使用curl访问https示例

今日在做一个项目,需要curl获取第三方的API,对方的API是https方式的。 之前使用curl能获取http请求,但今天获取https请求时,返回的内容总是为空,查阅资料后发现用curl访问https需要添加以下两行代码:

  1. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 
  2. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在

封装成一个函数如下:

  1. /** curl 获取 https 请求 
  2. * @param String $url 请求的url 
  3. * @param Array $data 要发送的数据
  4. * @param Array $header 请求时发送的header 
  5. * @param int $timeout 超时时间,默认30s 
  6. */
  7. function curl_https($url, $data=array(), $header=array(), $timeout=30){   
  8. $ch = curl_init();   
  9.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 
  10.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在 
  11.     curl_setopt($ch, CURLOPT_URL, $url);   
  12.     curl_setopt($ch, CURLOPT_HTTPHEADER, $header);   
  13.     curl_setopt($ch, CURLOPT_POST, true);   
  14.     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));   
  15.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
  16.     curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);   
  17. $response = curl_exec($ch);   
  18. if($error=curl_error($ch)){   
  19. die($error);   
  20.     }   
  21.     curl_close($ch);   
  22. return $response;   
  23. }   

使用示例:

  1. $url = 'https://www.example.com/api/message.php'; 
  2. $data = array('name'=>'fdipzone');   
  3. $header = array();   
  4. $response = curl_https($url, $data, $header, 5);   
  5. echo $response;   

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

http 协议详解

HTTP 协议,即超文本传输协议 (Hypertext transfer protocol)。 是一种详细规定了浏览器和万维网 (WWW = World Wid...

780
来自专栏高性能服务器开发

+从零实现一款12306刷票软件1.2

当然,这里需要说明一下的就是,由于全国的火车站点信息文件比较大,我们程序解析起来时间较长,加上火车站编码信息并不是经常变动,所以,我们我们没必要每次都下载这个s...

732
来自专栏along的开发之旅

Http响应和HttpServletResponse对应设置方法

其中状态码格外重要, 表示当前请求的响应状态. 服务器处理请求的常见的状态: 200 : 表示请求处理完成并完美返回 302: 表示请求需要进...

281
来自专栏风中追风

分布式基础__TCP IP 里的网络请求 到底是什么样的?

当我输入 一个url 在浏览器的地址栏按下回车 这个以前也写过博客了:一次URL输入域名按下回车到底发生了什么?

37716
来自专栏magicsoar

windows下的C++ socket服务器(4)

void handleAccept(int socket_fd) { char buf[1024] = { '\0' }; string cmd...

2255
来自专栏along的开发之旅

Permission Denial: not allowed to send broadcast in android

因为最近项目里Intent用到了广播”android.intent.action.MEDIA_MOUNTED”, 结果被提示权限不足, 查了下原因, 是因为从4...

1941
来自专栏优启梦

获取lofter官方首页背景壁纸

22710
来自专栏高性能服务器开发

+从零实现一款12306刷票软件1.3

12306的图片验证码一般由八个图片组成,像上面的“龙舟”文字,也是图片,这两处的图片(文字图片和验证码)都是在服务器上拼装后,发给客户端的,12306服务器上...

821
来自专栏Youngxj

网站状态码大全

1652
来自专栏python成长之路

返回固定页面的web服务器

1384

扫码关注云+社区