PHP+Curl伪造客户端获取页面

2026-04-17 16:54:21 172
分类:php

PHP+Curl伪造客户端获取页面,这个函数还是比较强大,甚至可以抓取https的页面,伪造请求头,伪造POST数据,伪造cookie等,还可以设置文本编码,gzip压缩。

/**
 * PHP+Curl伪造客户端获取页面
 * @param mixed $url     网页地址
 * @param mixed $post    伪造post数据
 * @param mixed $referer 伪装ip或域名
 * @param mixed $cookie  伪造cookie
 * @return mixed 返回抓取结果或者false
 */
function curlContent($url, $post = "", $referer = '', $cookie = '')
{
    $usergent = $_SERVER['HTTP_USER_AGENT'];
    // $usergent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'; //浏览器标识(PC端)
    // $usergent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'; //浏览器标识(移动端)

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        // 为true时请求有返回的值
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);       // 连接超时(秒)
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);              // 执行超时(秒)
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    // 禁止curl验证对等证书(https请求需要证书,所以https网页不一定能抓取)
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);        // 如果curl爬取过程中,设置CURLOPT_FOLLOWLOCATION为true,则会跟踪爬取重定向页面;否则,不会跟踪重定向页面。
    curl_setopt($ch, CURLOPT_USERAGENT, $usergent);     // 浏览器标识,有的网站会检查useragent
    // curl_setopt($ch, CURLOPT_ENCODING, "utf-8");     // 设置编码
    // curl_setopt($ch, CURLOPT_ENCODING, "gzip");      // gzip压缩

    if ($referer) {
        curl_setopt($ch, CURLOPT_REFERER, $referer);// 伪造referer
    }

    if ($post) {
        curl_setopt($ch, CURLOPT_POST, 1);          // 设置为POST方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);// 数据传输
    }

    if ($cookie) {
        curl_setopt($ch, CURLOPT_COOKIE, $cookie);  // 设置cookie
    }

    $output = curl_exec($ch);
    curl_close($ch);

    if ($output === false) {
        // 返回一个保护当前会话最近一次错误的字符串
        echo 'curlContent Error: ' . curl_error($ch) . '<br>';
        return false;
    }
    return $output;
}