REC

PHP使用Curl函数进行远程请求案例,爬虫,可保存账户登录状态

易航
3年前发布 /正在检测是否收录...

CURL简介:

CURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还支持IPv6,scoket5代理服务器,通过http代理服务器上传文件到FTP服务器等等。

本文主要介绍的是php远程请求CURL(爬虫、保存登录状态)的相关内容,下面话不多说了,来一起看看详细的介绍吧

php

GET案例:

<?php

/**
 * curl_get
 * @param $url
 * @param null $param
 * @param null $options
 * @return array
 */
function curl_get($url, $param = null, $options = null)
{
    if (empty($options)) {
        $options = array(
            'timeout'     => 30, // 请求超时
            'header'     => array(), // 数据格式如array('Accept: */*','Accept-Encoding: gzip, deflate, br')
            'cookie'     => '', // cookie字符串,浏览器直接复制即可
            'cookie_file'   => '', // 文件路径,并要有读写权限的
            'ssl'       => 0, // 是否检查https协议
            'referer'     => null
        );
    } else {
        empty($options['timeout']) && $options['timeout'] = 30;
        empty($options['ssl']) && $options['ssl']  = 0;
    }
    $result = array(
        'code'      => 0,
        'msg'       => 'success',
        'body'      => ''
    );
    if (is_array($param)) {
        $param = http_build_query($param);
    }
    $url = strstr($url, '?') ? trim($url, '&') . '&' . $param : $url . '?' . $param;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url); // 设置url
    !empty($options['header']) && curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 设置请求头
    if (!empty($options['cookie_file']) && file_exists($options['cookie_file'])) {
        curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
    } else if (!empty($options['cookie'])) {
        curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
    }
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解压gzip页面内容
    curl_setopt($ch, CURLOPT_HEADER, 1); // 获取请求头
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 输出转移,不输出页面
    !$options['ssl'] && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服务器端的验证ssl
    !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']); //伪装请求来源,绕过防盗
    curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
    //执行并获取内容
    $output = curl_exec($ch);
    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $header = substr($output, 0, $header_size);
    $output = substr($output, $header_size);
    //对获取到的内容进行操作
    if ($output === FALSE) {
        $result['code'] = 1; // 错误
        $result['msg'] = "CURL Error:" . curl_error($ch);
    }
    $result['header'] = $header;
    $result['body'] = $output;
    //释放curl句柄
    curl_close($ch);
    return $result;
}
?>

POST案例:

<?php

/**
 * curl_post
 * @param $url              请求地址
 * @param null $param       post参数
 * @param array $options    配置参数
 * @return array
 */
function curl_post($url, $param = null, $options = array())
{
    if (empty($options)) {
        $options = array(
            'timeout'     => 30,
            'header'     => array(),
            'cookie'     => '',
            'cookie_file'   => '',
            'ssl'       => 0,
            'referer'     => null
        );
    } else {
        empty($options['timeout']) && $options['timeout'] = 30;
        empty($options['ssl']) && $options['ssl']  = 0;
    }
    $result = array(
        'code'      => 0,
        'msg'       => 'success',
        'body'      => ''
    );
    if (is_array($param)) {
        $param = http_build_query($param);
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url); // 设置url
    !empty($options['header']) && curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 设置请求头
    if (!empty($options['cookie_file']) && file_exists($options['cookie_file'])) {
        curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
        curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
    } else if (!empty($options['cookie'])) {
        curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
    }
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解压gzip页面内容
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
    curl_setopt($ch, CURLOPT_HEADER, 1); // 获取请求头
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 输出转移,不输出页面
    !$options['ssl'] && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服务器端的验证ssl
    !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']); //伪装请求来源,绕过防盗
    curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
    //执行并获取内容
    $output = curl_exec($ch);
    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $header = substr($output, 0, $header_size);
    $output = substr($output, $header_size);
    //对获取到的内容进行操作
    if ($output === FALSE) {
        $result['code'] = 1; // 错误
        $result['msg'] = "CURL Error:" . curl_error($ch);
    }
    $result['header'] = $header;
    $result['body'] = $output;
    //释放curl句柄
    curl_close($ch);
    return $result;
}
?>

关于php远程请求CURL(爬虫,保存登录状态)的这篇文章到此结束。

其他请求类型行请参考这篇文章:PHP进行各种网络请求的方式和实现函数总结
© 版权声明
本站用户发帖仅代表本站用户个人观点,并不代表本站赞同其观点和对其真实性负责。
转载本网站任何内容,请按照转载方式正确书写本站原文地址。
THE END
喜欢就支持一下吧
点赞 0 分享 赞赏
评论 抢沙发
取消 登录评论