zoukankan      html  css  js  c++  java
  • php的cURL库介绍

    Php的curl库介绍

    Curl是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FEP、TELNET等。很多小偷程序都是使用这个函数。

    Curl是一种功能强大的库,支持很多不同的协议、选项,能提供URL请求相关的各种细节信息。

    首先,我们得先要确定我们的php是否开启了这个库,你可以使用phpinfo()函数来得到这一信息。

    <?php
    phpinfo();

    如果你可以在网页上看到下面的输出,那么表示curl库已被开启。

    如果你没有看到的话,那么你需要设置你的php并开启这个库。如果你是在windows平台下,那么非常的简单,你需要改一改你的php.ini文件的设置,并找到php_curl.dll,并取消前面的分号注释就行了。

    //取消下面的注释

    extension=php_curl.dll

    如果你是在linux下面,那么,你需要重新编译你的php了,编辑时,你需要打开编译参数,在configure命令上加上“--with-curl-”参数。

    为什么要用curl?

    是的,我们可以通过其他办法获取网页内容。大多数时候,都直接用简单的php函数:

    $content file_get_contents("http://127.0.0.1/demo1.txt");
    $content file("http://127.0.0.1/demo1.txt");
    $content readfile("http://127.0.0.1/demo1.txt");

    不过,这种做法缺乏灵活性和有效的错误处理。而且,你也不能用它完成一些高难度任务——比如处理cookies、验证、表单提交、文件上传等等。

    在学习更为复杂的功能之前,先来看一下在PHP中建立curl请求的基本步骤:

    //初始化
    $ch curl_init();
    //设置选项,包括URL
    curl_setopt($ch,CURLOPT_URL,"http://127.0.0.1/demo1.php");
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_HEADER,0);
    //执行并获取HTML文档内容
    $output curl_exec($ch);
    curl_close($ch);
    echo $output;

    第二步(也就是curl_setopt())最为重要,一切玄妙均在此。有一长串的curl参数可供设置,他们能指定URL请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些更常用也更有用的选项。

    你可以加一段检查错误的语句:

    $output curl_exec($ch);
    if ($output === FALSE) {
        echo "cURL Error: " curl_error($ch);
    }

    请注意,比较的时候我们用的是“===FALSE”,而非“==FALSE”。因为我们得区分空输出和布尔值FALSE,后者才是真正的错误。

    获取信息:这是另一个可选的设置项,能够在curl执行后获取这一请求相关信息:

    $info curl_getinfo($ch);
    //var_dump($info);
    echo '获取'$info['url'] . '耗时'$info['total_time'] . '秒';

     

    返回的数组中包括了一下信息:

    "url" //资源网络地址
    "content_type" //内容编码
    "http_code" //HTTP状态码
    "header_size" //header的大小
    "request_size" //请求的大小
    "filetime" //文件创建时间
    "ssl_verify_result" //SSL验证结果
    "redirect_count" //跳转技术
    "total_time" //总耗时
    "namelookup_time" //DNS查询耗时
    "connect_time" //等待连接耗时
    "pretransfer_time" //传输前准备耗时
    "size_upload" //上传数据的大小
    "size_download" //下载数据的大小
    "speed_download" //下载速度
    "speed_upload" //上传速度
    "download_content_length"//下载内容的长度
    "upload_content_length" //上传内容的长度
    "starttransfer_time" //开始传输的时间
    "redirect_time"//重定向耗时 

    POST方法发送数据:

    当发起GET请求时,数据可以通过“查询字串”(query string)传递给一个URL。

    header("content-type:text/html;charset=utf-8");
    $url "http://127.0.0.1/demo1.php";
    $post_data array(
        'foo'=>"bar",
        'query'=>'Nettuts'
    );
    //初始化
    $ch curl_init();
    //设置选项,包括URL
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
    //执行并获取HTML文档内容
    $output curl_exec($ch);
    if($output === FALSE){
        echo "curl error:".curl_error($ch);
    }else{
        echo $output;
    }
    curl_close($ch);

     

    文件上传和前面的POST十分相似,因为文件上传表单都是通过POST方法提交的。

    header("content-type:text/html;charset=utf-8");
    $url "http://127.0.0.1/demo1.php";
    $post_data array(
        'foo'=>"bar",
        'upload'=>'@C:/wamp/www/test.zip'
    );
    //初始化
    $ch curl_init();
    //设置选项,包括URL
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_POST,1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
    //执行并获取HTML文档内容
    $output curl_exec($ch);
    if($output === FALSE){
        echo "curl error:".curl_error($ch);
    }else{
        echo $output;
    }
    curl_close($ch);

    如果你需要上传一个文件,只需要把文件路径像一个post变量一样传过去,不过记得在前面加班@符号。

  • 相关阅读:
    sql server delete语句
    sql server 通配符
    sql server join联结
    windows下如何使用两个版本的nodejs
    PHP的Trait 特性
    PHP错误与异常处理try和catch
    laravel belongsTo()&hasOne()用法详解
    Laravel Model 的 fillable (白名单)与 guarded (黑名单)
    js原生,缓动动画封装
    js原生轮播图
  • 原文地址:https://www.cnblogs.com/zhouguowei/p/5315917.html
Copyright © 2011-2022 走看看