CURL通过设置curl_setopt模拟来源,IP,提交表单数据,模拟登陆等

来源:互联网 发布:刺客信条壁纸软件 编辑:程序博客网 时间:2024/06/16 18:46

在开发中我们有时会碰到这样的需求,需要采集其他网站数据,或者向其他网站提交数据,我们需要CURL通过设置curl_setopt模拟来源,IP,提交表单数据,模拟登陆等。下面给出实际示例:

    $ip = '118.89.238.218';    $post = array (        'name' => 'xxxx',        'password' => 'xxxxxx',    ); //需要提交的表单数据    $url = 'https://xxxxx.cn/login/login.html'; //提交地址    $refer = 'https://xxxxxx.cn/Index/index.html'; //模拟来源地址    $header = array(        'Host:xxxx.cn',        'Referer:'.$refer,        'X-Forwarded-For:'.$ip,        'Client-Ip:'.$ip,        'Upgrade-Insecure-Requests:1',        'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36',    );    $res = curl_post($url, $cookie, $post, $refer, $header);    if(preg_match('/<em>登录成功!<\/em>/', $res)){        echo date('Y-m-d H:i:s')."\t".$post['name'].'登录成功';    }else{        echo date('Y-m-d H:i:s')."\t".$post['name'].'登录失败';    }

curl函数封装(post方式)

function curl_post($url, $cookie, $post = array(), $refer = '', $header = array()) {    $curl = curl_init();//初始化curl模块    curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址    $refer && curl_setopt($curl, CURLOPT_REFERER, $refer);    count($header) && curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//模拟头信息    curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否自动显示返回的信息    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); //读取cookie    curl_setopt($curl, CURLOPT_POST, 1);//post方式提交    count($post) && curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中    $rs = curl_exec($curl);//执行cURL    curl_close($curl);//关闭cURL资源,并且释放系统资源    return $rs;}

curl函数封装(get方式)

function curl_get($url, $cookie, $get = array(), $refer = '', $header = array()) {    $curl = curl_init();//初始化curl模块    curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址    $refer && curl_setopt($curl, CURLOPT_REFERER, $refer);    count($header) && curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//模拟头信息    curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否自动显示返回的信息    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); //读取cookie    curl_setopt($curl, CURLOPT_POST, 0);//post方式提交    count($get) && curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($get));//要提交的信息    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中    $rs = curl_exec($curl);//执行cURL    curl_close($curl);//关闭cURL资源,并且释放系统资源    return $rs;}