什么是curl

curl是利用URL语法在命令行方式下工作的开源文件传输工具。

CURL它支持很多协议: DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP。 curl是瑞典curl组织开发的,curl的官网是http://curl.haxx.se/ CURL是在命令行或脚本用来传输数据

注意: curl指的是curl命令行工具,可以从命令行或者脚本或者批处理文件中运行curl。curl创建于1998年,并且提供了100多个选项去控制它。

CURL是一个软件项目的名字。该软件项目包含了上面所说的curl和libcurl,并且都是开源的。

CURL通常用作PHP中libcurl扩展的名字。这个扩展确保了PHP程序员在程序中可以访问libcurl库所提供的功能。

libcurl介绍

libcurl为一个免费开源的,用作其他程序的开发库,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP等协议。

同curl一样,libcurl也支持SSL证书,HTTP POST, HTTP PUT,FTP上传,基于表单的HTTP上传等. libcurl是高度可移植的,可以工作在不同的平台上,支持Windows,Unix,Linux等

libCURL使用场景

实现的功能

实现远程获取和采集内容

实现PHP网页版的FTP上传下载 实现模拟登陆,邮件系统,curl可以模拟cookies

实现接口对接(API),数据传输等:通过一个平台发送短信,抓取和传递所传输的信息

实现模拟Cookie等:登陆的状态下才可以操作一些属性。

curl与libcurl对比

相同点

curl和libcurl都可以利用多种多样的协议来传输文件,包括HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE等。

不同点 curl是命令行工具,可以通过shell或脚本来运行curl。 curl底层所使用的库是libcurl。

libcurl是一个库,通常与别的程序绑定在一起使用,你自己的程序或项目中使用libcurl以获得类似CURL的强大功能。PHP扩展库php_curl.dll就是对curl的一个封装

libCURL操作

在PHP中使用libcurl,也就是PHP程序员通常所说的PHP中的"curl",默认情况下PHP是不支持CURL的,

需要在php.ini中开启该功能 ;extension=php_curl.dll 前面的分号去掉,

重启apache 整个操作过程中第一步是用curl_init()函数进行初始化 $curl = curl_init();

用curl_setopt()函数进行设置选项,它是CURL最重要的操作.有一长串参数可供设置,它们能指定URL请求的各个细节 curl_setopt($curl, string option, mixed value)

$curl curl_init() 函数初始化返回的结果

option 设置参数选项

value 选项给定的值。

option相关参数: 请求行 GET /2016123/curl/index.php HTTP/1.1 CURLOPT_URL: (string)URL 需要获取的URL地址,也可以在curl_init()函数中设置。

CURLOPT_BINARYTRANSFER: (bool)true|false 设置一个二进制传输 ,直接输出

CURLOPT_RETURNTRANSFER: true|false 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出

CURLOPT_HEADER: 1|0 启用时会将头文件的信息作为数据流输出,告诉服务器头信息

CURLOPT_POST: 1|0 是否是发送一个HTTP POST 这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。

CURLOPT_POSTFIELDS: (array)post data 传递一个作为HTTP POST操作的所有数据的字符串。

CURLOPT_USERAGENT: 在HTTP请求中包含一个”user-agent”头的字符串。 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0

CURLOPT_FILE: ($fileresource) 设置输出文件的位置,值是一个资源类型

设置后,进行执行事务 $result = curl_exec($curl); 如果 CURLOPT_RETURNTRANSFER设置为 0 函数返回: true|false

如果 CURLOPT_RETURNTRANSFER设置为 1 函数返回: 成功: 服务器返回output 失败: false

最后关闭curl_close($curl);

curl_init() — 初始化一个curl会话,函数唯一的一个参数是可选的,表示一个url地址

curl_copy_handle() — 拷贝一个curl连接资源的所有内容和参数

curl_errno() — 返回一个包含当前会话错误信息的数字编号 遵循就近原则

curl_error() — 返回一个包含当前会话错误信息的字符串 遵循就近原则

curl_exec() — 执行一个curl会话

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

实现伪多线程操作

curl_multi_init() — 初始化一个curl批处理句柄资源

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

curl_multi_exec() — 解析一个curl批处理句柄 curl_multi_close() — 关闭一个批处理句柄资源

curl_multi_getcontent() — 返回获取的输出的文本流

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

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

curl_multi_select() —Get all the sockets associated with the cURL extension, which can then be "selected" curl_setopt() — 为一个curl设置会话参数

curl_setopt_array() — 以数组的形式为一个curl设置会话参数

curl_version() — 获取curl相关的版本信息

curl_close($ch)函数的作用是关闭一个curl会话

 

步骤总结如下:

第一步:调用$multi_curl = curl_multi_init()

第二步:循环调用curl_multi_add_handle($multi_curl,$curl) 这一步需要注意的是,curl_multi_add_handle的第二个参数是由curl_init()而来的子handle。

第三步:持续调用curl_multi_exec() 循环

第四步:根据需要循环调用curl_multi_getcontent()获取结果

第五步:调用curl_multi_remove_handle(),并为每个子handle调用curl_close()

第六步:调用curl_multi_close()

posted on 2017-11-02 12:12  顾君临  阅读(72)  评论(0)    收藏  举报