首页 > 技术文章 > Curl的简单使用步骤

maomaochongchong 2018-01-25 14:13 原文

一、curl的简单使用步骤
     1.初始化
     2.设置请求选项
     3.执行一个cURL会话并且获取相关回复
     4.释放cURL句柄,关闭curl
 
 
具体实现:
     1. 初始化一个cURL会话
        $ch = curl_init();
 
     2. 设置请求选项
        curl_setopt($ch, CURLOPT_URL, "http://www.360weboy.com");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
 
     3. 执行Curl会话获取相关回复
         $response = curl_exec($ch);
 
     4. 释放Curl 句柄, 关闭Cur会话       
          curl_close($ch);
 
    二、curl 错误处理
        $response = curl_exec($ch); 
           if ($response  === FALSE) {
              echo "cURL 具体出错信息: " . curl_error($ch);
            }
 
    三、 获取curl请求的具体信息
       可以使用curl_getinfo获取该请求的具体信息:
          curl_exec($ch);
         $curl_info= curl_getinfo($ch);
          echo "收到的http回复的code为: {$curl_info['http_code']}";
 
     四. 使用curl 发送post请求
        $url = "http://www.360weboy.me/post.php"; 
         $post_data = array (
             "blog_name" => "360weboy",
             "blog_url" => "http://www.360weboy.com",
             "action" => "Submit"
          );
 
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
         // 设置请求为post类型
         curl_setopt($ch, CURLOPT_POST, 1);
         // 添加post数据到请求中
         curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
 
          // 执行post请求,获得回复
         $response= curl_exec($ch);
         curl_close($ch);
         echo $response;
 
    五、 使用curl发送上传文件   
      代码如下:
         $url = "http://www.360weboy.me/upload.php";
 
        $post_data = array (
             "attachment" => "@E:/jackblog/boy.jpg"
        );
 
         //初始化cURL会话
        $ch = curl_init();
 
        //设置请求的url
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
        //设置为post请求类型
        curl_setopt($ch, CURLOPT_POST, 1);
 
        //设置具体的post数据
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
 
        $response = curl_exec($ch);
        curl_close($ch);
        print_r($response);
 
     六、文件下载
  上述将了文件上传,同样的也可以使用curl来自动地完成文件的下载以及保存。有一点要补充下,在执行一个curl请求时,如果你需要获取返回的内容,而不是直接输出返回的内容的话,别忘记使用下面的代码设置,因为curl的默认是输出请求的回复内容:
 代码如下:
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     假如在360weboy的服务器根目录下面有一个test.zip文件,我们需要将其下载下来,并且保存到本地文件中,就可以尝试使用下面的代码来实现:
 代码如下:
        //设置请求的下载文件的url
        $url  = 'http://www.360weboy.com/test.zip';
 
        //保存到本地的文件路径
        $path = 'local/path/to/test.zip';
 
        //初始化请求,设置请求,获取回复,关闭会话
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $data = curl_exec($ch);
 
        curl_close($ch);
 
        //将文件内容写入本地文件
        file_put_contents($path, $data);
   
   注意:我以上省略了错误处理方面的代码,只是简单做个示例, 在实际中,你还需要通过curl_getinfo函数来进行错误处理!
 
上述代码对于下载比较大型的文件是不适用的,因为需要先将文件读取到内存中,等所有内容都读取完毕,然后再写入到本地硬盘中。即使php中设置的memory limit非常大,这种情况对性能的影响也是很大的。所以,我们对于大型文件的下载,应该让curl来接管这个任务,实现边下载,边写入的处理,这样的话,就没什么问题了。请看下述代码:
 代码如下:
 
        $url  = 'http://www.360weboy.com/test.zip';
        $path = 'local/path/to/test.zip';
        // 打开本地文件
        $fp = fopen($path, 'w');
        // 告诉curl本地文件句柄
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_FILE, $fp);
       curl_exec($ch);
        curl_close($ch);
        fclose($fp);
在上述代码中,我们先打开个本地文件,并将文件句柄设置到curl中,然后让curl一边读取远程数据,一边写入到本地文件中。因为我们不需要在程序中获取远程回复的内容了,所以只要执行请求就可以。
 
   七、http 验证
    如果服务器端需要验证请求,可以通过类似一下示例代码来实现:
     代码如下:
     
      $url = "http://www.360weboy.com/users/";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
        // 设置用户名以及密码
        curl_setopt($ch, CURLOPT_USERPWD, "username:password");
 
        // 设置重导向
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);
 
        $response = curl_exec($ch);
        curl_close($ch);
 
    八、通过代理发送请求
        cURL还可以通过代理服务器来向发送请求,请看一下示例代码:
 代码如下:
 
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL,'http://www.360weboy.com');
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
        // 设置代理ip地址
        curl_setopt($ch, CURLOPT_PROXY, '222.73.173.50:8080');
 
        // 要验证的话,这里设置用户名以及密码
        curl_setopt($ch, CURLOPT_PROXYUSERPWD,'username:password');
 
        $response = curl_exec($ch);
        curl_close ($ch);

推荐阅读