[PHP自动化-进阶]003.CURL处理Https请求访问

引言:继前文《模拟登录并采集数据》,《模拟登录带有验证码的网站》,大家对CURL基本上已经有了认识,这一讲简单的说一下请求Https。

在很多的站点,如TalkingData, BaiDu等等,一些请求协议都是走SSL,大白话来说就是Https,这种协议在模拟CURL时可能会出现请求不成功等等的问题。

下面为大家讲一下解决方案。

这一讲很简单,但能说明问题……。

异常提示



大多数异常信息提示如下:证书验证失败。

SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

切入主题



解决方法,在curl请求时,加入

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

curl https post请求封装代码代码

<?php
/** curl 获取 https 请求
* @param String $url        请求的url
* @param Array  $data       要發送的數據
* @param Array  $header     请求时发送的header
* @param int    $timeout    超时时间,默认30s
*/
function curl_https($url, $data=array(), $header=array(), $timeout=30){

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

    $response = curl_exec($ch);

    if($error=curl_error($ch)){
        die($error);
    }

    curl_close($ch);

    return $response;

}

// 调用
$url = ‘https://www.example.com/api/message.php‘;
$data = array(‘name‘=>‘fdipzone‘);
$header = array();

$response = curl_https($url, $data, $header, 5);

echo $response;
?>

未完待续……。

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4792496.html

时间: 2024-10-12 21:19:27

[PHP自动化-进阶]003.CURL处理Https请求访问的相关文章

用curl发起https请求

使用curl发起https请求 使用curl如果想发起的https请求正常的话有2种做法: 方法一.设定为不验证证书和host. 在执行curl_exec()之前.设置option $ch = curl_init(); ...... curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 方法二.设定一个正确的证书. 本地ssl判别证书太旧,导致链接报错ssl

用curl获取https请求

今天一个同事反映,使用curl发起https请求的时候报错:"SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed" 很明显,验证证书的时候出现了问题. 使用curl如果想发起的https请求正常的话有2种做法: 方法一.设定为不验证证书和host.

BPM实例分享:DMZ内部网络转发https请求访问微信API

应用场景:H3 BPM部署在企业内部网络需要访问微信API但不能直接访问互联网 解决方案:通过DMZ服务器部署Nginx转发来自H3 BPM的https请求至微信服务器 1. 在H3 BPM服务器配置hosts文件添加一条记录,将访问微信API服务器重定向至内部的DMZ服务器 [DMZ IP] qyapi.weixin.qq.com 2.参考链接创建SSL服务器的无密码证书和key用于解密https加密内容 http://www.voidcn.com/blog/huplion/article/p

php 使用cURL发起https(ssl)请求时注意事项

使用curl发起https请求的时候报错:"SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed" 很明显,验证证书的时候出现了问题. 使用curl如果想发起的https请求正常的话有2种做法: 方法一.设定为不验证证书和host. 在执行curl_

php之curl实现http与https请求的方法

本文实例讲述了php之curl实现http与https请求的方法,分享给大家供大家参考.具体如下: 通常来说,php的curl函数组可以帮助我们把机器伪装成人的行为来抓取网站,下面来分享两个例子,一个是访问http网页,一个访问https网页,一起来看一下. 每次要使用curl的时候,总要查一堆资料. 现在将常用的几句保存下来,省的每次都去谷歌. 常规curl请求: 复制代码 代码如下: $url = 'http://www.jb51.net'; $curl = curl_init(); cur

我的Android进阶之旅------&gt;Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.UnsupportedEn

AFNetWorking3.0使用 自签名证书的https请求

前几日,项目组出于安全角度的考虑,要求项目中的请求使用https请求,因为是企业内部使用的app,因此使用了自签名的证书,而自签名的证书是不受信任的,所以我们就需要自己来做证书的验证,包括服务器验证客户端的证书和我们要信任服务器的证书,SSL双向认证的原理我这里就不赘述了,这里提供两篇博客 iOS安全系列之一:HTTPS: http://oncenote.com/2014/10/21/Security-1-HTTPS/ iOS安全系列之二:HTTPS进阶: http://oncenote.com

封装请求方法,也就是实用curl方法去请求

//封装请求接口方法    function request($url,$https=true,$method='get',$data=null){        //1.初始化curl        $ch = curl_init($url);        //2.设置相关请求参数        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);    //不直接输出字符串        //判断是否为https请求        if($https

【php】https请求

/** * 模拟提交参数,支持https提交 可用于各类api请求 * @param string $url : 提交的地址 * @param array $data :POST数组 * @param string $method : POST/GET,默认GET方式 * @return mixed */ function http($url, $data='', $method='GET'){ $curl = curl_init(); // 启动一个CURL会话 curl_setopt($cu