curl介绍及使用

curl介绍及php中curl的相关函数

(1)前言

这里主要介绍的还是php中curl的相关函数。

(2)工具介绍

cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。

cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。

curl还支持SSL认证、HTTP POST、HTTP PUT、FTP上传, HTTP form based upload、proxies、HTTP/2、cookies、用户名+密码认证(Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos)、file transfer resume、proxy tunneling。

(3)php中curl简单使用步骤

a.curl的简单使用步骤(以下内容参考自https://www.jianshu.com/p/dd2c76f6da26)

初始化一个cURL会话

    $ch = curl_init();

设置请求选项

    curl_setopt($ch, CURLOPT_URL, "http://www.360weboy.com");

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_HEADER, 0);

执行Curl会话获取相关回复

     $response = curl_exec($ch);

释放Curl 句柄, 关闭Cur会话

      curl_close($ch);

b.curl 错误处理

  $response = curl_exec($ch); 

       if ($response  === FALSE) {

          echo "cURL 具体出错信息: " . curl_error($ch);

        }

c.获取curl请求的具体信息

可以使用curl_getinfo获取该请求的具体信息:

      curl_exec($ch);

     $curl_info= curl_getinfo($ch);

      echo "收到的http回复的code为: {$curl_info['http_code']}";

d.使用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;

e.使用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);

f.

上述将了文件上传,同样的也可以使用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一边读取远程数据,一边写入到本地文件中。因为我们不需要在程序中获取远程回复的内容了,所以只要执行请求就可以。

g.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);

h.通过代理发送请求

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);

(4)PHP cURL 函数

PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。libcurl支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

PHP中使用cURL实现Get和Post请求的方法这些函数在PHP 4.0.2中被引入。

[1] 以下包含了PHP cURL函数列表:

curl_close()——关闭一个cURL会话。

curl_copy_handle()——复制一个cURL句柄和它的所有选项。

curl_errno()——返回最后一次的错误号。

curl_error()——返回一个保护当前会话最近一次错误的字符串。

curl_escape()——返回转义字符串,对给定的字符串进行URL编码。

curl_exec()——执行一个cURL会话。

curl_file_create()——创建一个CURLFile对象。

curl_getinfo()——获取一个cURL连接资源句柄的信息。

curl_init()——初始化一个cURL会话。

curl_multi_add_handle()——向curl批处理会话中添加单独的curl句柄。

curl_multi_close()——关闭一组cURL句柄。

curl_multi_exec()——运行当前cURL句柄的子连接

curl_multi_getcontent()——如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流。

curl_multi_info_read()——获取当前解析的cURL的相关传输信息。

curl_multi_init()——返回一个新cURL批处理句柄。

curl_multi_remove_handle()——移除curl批处理句柄资源中的某个句柄资源。

curl_multi_select()——等待所有cURL批处理中的活动连接。

curl_multi_setopt()——设置一个批处理cURL传输选项。

curl_multi_strerror()——返回描述错误码的字符串文本。

curl_pause()——暂停及恢复连接。

curl_reset()——重置libcurl的会话句柄的所有选项。

curl_setopt_array()——为cURL传输会话批量设置选项。

curl_setopt()——设置一个cURL传输选项。

curl_share_close()——关闭cURL共享句柄。

curl_share_init()——初始化cURL共享句柄。

curl_share_setopt()——设置一个共享句柄的cURL传输选项。

curl_strerror()——返回错误代码的字符串描述。

curl_unescape()——解码URL编码后的字符串。

curl_version()——获取cURL版本信息。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2023 00hello00

请我喝杯咖啡吧~

支付宝
微信