php curl

    添加时间:2013-6-2 点击量:

    curl可以说是php里一个很是强大的功能,每个php法度员都应当进修并熟悉curl,应用curl前确保你的php_curl扩大已经开启。



    一、curl应用


    例如:我们采集深圳智联雇用上PHP雇用的第一页信息



    ¥url=http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E6%B7%B1%E5%9C%B3&kw=php&sm=0&p=1;
    

    //初始化
    ¥ch = curl_init();
    //设置选项,包含URL
    curl_setopt(¥ch, CURLOPT_URL, ¥url);
    curl_setopt(
    ¥ch, CURLOPT_RETURNTRANSFER, 1);//不主动输出内容
    curl_setopt(¥ch, CURLOPT_HEADER, 0);//不返回头部信息
    //履行curl

    ¥output = curl_exec(¥ch);
    //错误提示
    if(curl_exec(¥ch) === false){
    die(curl_error(¥ch));
    }
    //开释curl句柄
    curl_close(¥ch);

    header(Content-type: text/html; charset=utf-8);
    echo ¥output;


    当然我们必须对返回的数据应用<<正则表达式>>处理惩罚,找出我们想要的那一项目组,然后按照你的须要把数据填充到你网站里



    //职位名称
    
    preg_match_all(/<td class=Jobname>.?<a\shref=(.?)\starget=_blank>(.?)<\/a>/s, ¥output¥title);
    ¥title[1];//链接
    ¥title[2];//题目

    //公司名称

    preg_match_all(/<td class=Companyname>.?<a href=(.?)\starget=_blank>(.?)<\/a>/s, ¥output¥company);
    ¥company[1];//链接
    ¥company[2];//名字

    //工作地址

    preg_match_all(/<td class=Companyaddress>\s(.?)\s<\/td>/s, ¥output¥address);
    ¥address[1];//地址

    //公布日期

    preg_match_all(/<td class=releasetime>\s(.?)\s<\/td>/s, ¥output¥time);
    ¥time[1];//时候

    var_dump¥time[1]);



    二、常用功能


    curl的核心是经由过程设置各类选项来达到各类功能,这里我们介绍几种常用的选项。


    1.post数据



    ¥post=array
    uid=>test,
    pwd=>curl123
    );

    curl_setopt(
    ¥ch, CURLOPT_POST, 1);//设置为POST体式格式
    curl_setopt(¥ch, CURLOPT_POSTFIELDS, http_build_query¥post));//POST数据


    2.cookie



    ¥savefile=dirname__FILE__).save.txt;
    
    ¥getfile=dirname__FILE__).get.txt;

    //可以分隔应用
    curl_setopt(¥ch, CURLOPT_COOKIEJAR, ¥savefile); //保存
    curl_setopt(¥ch, CURLOPT_COOKIEFILE, ¥getfile); //读取


    3.捏造IP、来路



    curl_setopt(¥ch, CURLOPT_HTTPHEADER, array(X-FORWARDED-FOR:8.8.8.8, CLIENT-IP:8.8.8.8));//机关IP  
    
    curl_setopt(¥ch, CURLOPT_REFERER, http://www.baidu.com);//机关来路


    curl_setopt选项大全,详见PHP手册:http://www.php.net/manual/zh/function.curl-setopt.php



    三、多线程


    官方示例



    // 创建一对cURL资料
    
    ¥ch1 = curl_init();
    ¥ch2 = curl_init();

    // 设置URL和响应的选项
    curl_setopt(¥ch1, CURLOPT_URL, http://www.example.com/);
    curl_setopt(
    ¥ch1, CURLOPT_HEADER, 0);
    curl_setopt(
    ¥ch2, CURLOPT_URL, http://www.php.net/);
    curl_setopt(
    ¥ch2, CURLOPT_HEADER, 0);

    // 创建批处理惩罚cURL句柄
    ¥mh = curl_multi_init();

    // 增长2个句柄
    curl_multi_add_handle(¥mh¥ch1);
    curl_multi_add_handle(
    ¥mh¥ch2);

    ¥running=null;
    // 履行批处理惩罚句柄
    do {
    usleep(10000);
    curl_multi_exec(
    ¥mh¥running);
    }
    while¥running > 0);

    // 封闭全部句柄
    curl_multi_remove_handle(¥mh¥ch1);
    curl_multi_remove_handle(
    ¥mh¥ch2);
    curl_multi_close(
    ¥mh);

    我们永远不要期待别人的拯救,只有自己才能升华自己。自己已准备好了多少容量,方能吸引对等的人与我们相遇,否则再美好的人出现、再动人的事情降临身边,我们也没有能量去理解与珍惜,终将擦肩而过。—— 姚谦《品味》
    分享到: