PHP

PHP CURL的使用

PHP curl 的一些简单用法和封装,代码摘自网络。

首先安装curl模块,我用的是debian系统:

apt-get install php5-curl

PHP CURL 请求http链接,转自这里    

$url = 'http://www.xxx.com';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);

PHP CURL 请求https链接,同样转自这里 

$url = 'https://www.xxx.com';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);

//当请求https的数据时,会要求证书,这时候,加上下面这两个参数,规避ssl的证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 

这是一个博友自己写的请求url的函数,转自这里 

//参数1:访问的URL,参数2:post数据(不填则为GET),参数3:提交的cookies,参数4:是否返回cookies
 function curl_request(url,post='',cookie='',returnCookie=0){
        curl = curl_init();
        curl_setopt(curl, CURLOPT_URL, url);
        curl_setopt(curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
        curl_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt(curl, CURLOPT_AUTOREFERER, 1);
        curl_setopt(curl, CURLOPT_REFERER, "http://XXX");
        if(post) {
            curl_setopt(curl, CURLOPT_POST, 1);
            curl_setopt(curl, CURLOPT_POSTFIELDS, http_build_query(post));
        }
        if(cookie) {
            curl_setopt(curl, CURLOPT_COOKIE,cookie);
        }
        curl_setopt(curl, CURLOPT_HEADER,returnCookie);
        curl_setopt(curl, CURLOPT_TIMEOUT, 10);
        curl_setopt(curl, CURLOPT_RETURNTRANSFER, 1);
        data = curl_exec(curl);
        if (curl_errno(curl)) {
            return curl_error(curl);
        }
        curl_close(curl);
        if(returnCookie){
            list(header,body) = explode("\r\n\r\n", data, 2);
            preg_match_all("/Set\-Cookie:([^;]*);/",header, matches);info['cookie']  = substr(matches[1][0], 1);info['content'] = body;
            returninfo;
        }else{
            return $data;
        }
}

这是别人写的,请求使用GET和请求POST的URL,转自这里 

//注意:这里的url已经包含参数了,不带参数你自己处理哦GET很简单
function curl_get_https(url){
    curl = curl_init(); // 启动一个CURL会话
    curl_setopt(curl, CURLOPT_URL, url);
    curl_setopt(curl, CURLOPT_HEADER, 0);
    curl_setopt(curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
    curl_setopt(curl, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在tmpInfo = curl_exec(curl);     //返回api的json对象
    //关闭URL请求
    curl_close(curl);
    return tmpInfo;    //返回json对象
}

/* PHP CURL HTTPS POST */
function curl_post_https(url,data){ // 模拟提交数据函数curl = curl_init(); // 启动一个CURL会话
    curl_setopt(curl, CURLOPT_URL,url); // 要访问的地址
    curl_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
    curl_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
    curl_setopt(curl, CURLOPT_USERAGENT,_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    curl_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    curl_setopt(curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    curl_setopt(curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
    curl_setopt(curl, CURLOPT_POSTFIELDS, data); // Post提交的数据包
    curl_setopt(curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt(curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt(curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
    tmpInfo = curl_exec(curl); // 执行操作
    if (curl_errno(curl)) {
        echo 'Errno'.curl_error(curl);//捕抓异常
    }
    curl_close(curl); // 关闭CURL会话
    returntmpInfo; // 返回数据,json格式
}