数据传输神器cURL解析

/ 0评 / 0

cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。本文将介绍PHP中的 cURL 库的一些高级特性,以及在PHP中如何运用它,扩展:php手册中的说明 。

cURL简单使用流程

1.初始化cURL句柄

$curlHandle = curl_init();

2.设置变量

curl_setopt($curlHandle, CURLOPT_URL, "http://www.baidu.com/");
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);

3.执行并接收结果

$result = curl_exec($curlHandle);

4.关闭句柄

curl_close($curlHandle);

post实例

function sendSms($mobile, $message) {

    // 短信接口地址
    $smsApiUrl = 'http://sms-api.luosimao.com/v1/send.json';
    
    // 短信密钥
    $smsApiKey = '';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $smsApiUrl);                  // 发送的目标URL
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);               // 连接超时时间
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);             // 返回数据并且不直接打印
    curl_setopt($ch, CURLOPT_HEADER, false);                    // 不设置头信息
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);         // 基础授权验证
    curl_setopt($ch, CURLOPT_USERPWD, 'api:key-' . $smsApiKey); // : 前面是用户名  后面是密码
    curl_setopt($ch, CURLOPT_PORT, true);                       // 开启连接端口
    
    // post请求体
    curl_setopt($ch, CURLOPT_POSTFIELDS, [
        'mobile' => $mobile,
        'message' => $message . '【六阿哥科技】',
    ]);

    // 发送post请求并接收返回结果
    $result = curl_exec($ch);

    // 关闭句柄
    curl_close($ch);

    $result = json_decode($result, true);

    if ($result['error'] == 0 && $result['msg'] == 'ok') {
        return true;
    } else {
        return false;
    }
}

上面例子是我项目中使用 luosimao 短信接口的一个抽取方法,使用cURL发送post请求,并处理返回结果。不过,cURL的作用远远不止于此。

cURL库的函数列表

curl_close // 关闭CURL会话
curl_copy_handle // 复制一个CURL会话句柄,同时3复制其所有参数
curl_errno // 返回最后一个错误码
curl_error // 返回一个字符串,用以描述当前会话的最后一个错误
curl_exec // 执行当前会话
curl_getinfo // 获取特定信息
curl_init // 初始化CURL会话
curl_multi_add_handle // 在一个多连接会话中添加一个句柄
curl_multi_close // 关闭一个多句柄CRUL会话
curl_multi_exec // 执行一个多句柄CURL会话
curl_multi_getcontent // 返回一个句柄执行后的内容,如果设置了CURLOPT_RETURNTRANSFER
curl_multi_info_read // 获取当前所有连接的信息
curl_multi_init // 初始化一个多句柄会话
curl_multi_remove_handle // 从一个多句柄会话中删除一个句柄
curl_multi_select // 获取所有绑定的套接字
curl_setopt // 设置CURL传输选项
curl_version // 获取CURL版本

常用设置选项布尔值选项

CURLOPT_AUTOREFERER // 当返回的信息头含有转向信息时,自动设置前向连接
CURLOPT_BINARYTRANSFER // TRUEtoreturntherawoutputwhenCURLOPT_RETURNTRANSFERisused.
CURLOPT_COOKIESESSION // 标志为新的cookie会话,忽略之前设置的cookie会话
CURLOPT_CRLF // 将Unix系统的换行符转换为Dos换行符
CURLOPT_DNS_USE_GLOBAL_CACHE // 使用全局的DNS缓存
CURLOPT_FAILONERROR // 忽略返回错误
CURLOPT_FILETIME // 获取请求文档的修改日期,该日期可以用curl_getinfo()获取。
CURLOPT_FOLLOWLOCATION // 紧随服务器返回的所有重定向信息
CURLOPT_FORBID_REUSE // 当进程处理完毕后强制关闭会话,不再缓存供重用
CURLOPT_FRESH_CONNECT // 强制建立一个新的会话,而不是重用缓存的会话
CURLOPT_HEADER // 在返回的输出中包含响应头信息
CURLOPT_HTTPGET // 设置HTTP请求方式为GET
CURLOPT_HTTPPROXYTUNNEL // 经由一个HTTP代理建立连接
CURLOPT_NOBODY // 返回的输出中不包含文档信息.
CURLOPT_NOPROGRESS // 禁止进程级别传输,PHP自动设为真
CURLOPT_NOSIGNAL // 忽略所有发往PHP的信息
CURLOPT_POST // 设置POST方式提交数据,POST格式为application/x-www-form-urlencoded
CURLOPT_PUTTRUE // 设置PUT方式上传文件,同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE
CURLOPT_RETURNTRANSFER // 返回字符串,而不是调用curl_exec()后直接输出
CURLOPT_SSL_VERIFYPEER // SSL验证开启
CURLOPT_UNRESTRICTED_AUTH // 一直链接后面附加用户名和密码,同时设置CURLOPT_FOLLOWLOCATION
CURLOPT_UPLOAD // 准备上传

整数值选项

CURLOPT_BUFFERSIZE // 缓存大小
CURLOPT_CONNECTTIMEOUT // 连接时间设置,默认0为无限制
CURLOPT_DNS_CACHE_TIMEOUT // 内存中保存DNS信息的时间,默认2分钟
CURLOPT_INFILESIZE // 上传至远程站点的文件尺寸
CURLOPT_LOW_SPEED_LIMIT // 传输最低速度限制andabort.
CURLOPT_LOW_SPEED_TIME // 传输时间限制
CURLOPT_MAXCONNECTS // 最大持久连接数
CURLOPT_MAXREDIRS // 最大转向数
CURLOPT_PORT // 连接端口
CURLOPT_PROXYAUTH // 代理服务器验证方式
CURLOPT_PROXYPORT // 代理服务器端口
CURLOPT_PROXYTYPE // 代理服务器类型
CURLOPT_TIMEOUT // CURL函数的最大执行时间

字符串选项

CURLOPT_COOKIE // HTTP头中set-cookie中的cookie信息
CURLOPT_COOKIEFILE // 包含cookie信息的文件,cookie文件的格式可以是Netscape格式,或者只是HTTP头的格式
CURLOPT_COOKIEJAR // 连接结束后保存cookie信息的文件
CURLOPT_CUSTOMREQUEST // 自定义请求头,使用相对地址
CURLOPT_ENCODING // HTTP请求头中Accept-Encoding的值
CURLOPT_POSTFIELDS // POST格式提交的数据内容
CURLOPT_PROXY // 代理通道
CURLOPT_PROXYUSERPWD // 代理认证用户名和密码
CURLOPT_RANGE // 返回数据的范围,以字节记
CURLOPT_REFERER // 前向链接
CURLOPT_URL // 要连接的URL地址,可以在curl_init()中设置
CURLOPT_USERAGENT // HTTP头中User-Agent的值
CURLOPT_USERPWD // 连接种使用的验证信息

数组选项

CURLOPT_HTTP200ALIASES // 200响应码数组,数组中的响应吗被认为是正确的响应
CURLOPT_HTTPHEADER // 自定义请求头信息

句柄选项

CURLOPT_FILE // 传输要写入的晚间句柄,默认是标准输出
CURLOPT_INFILE // 传输要读取的文件句柄
CURLOPT_STDERR // 作为标准错误输出的一个替换选项
CURLOPT_WRITEHEADER // 传输头信息要写入的文件

回调函数选项

CURLOPT_HEADERFUNCTION // 拥有两个参数的回调函数,第一个是参数是会话句柄,第二是HTTP响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息按行返回。设置返回值为字符串长度。
CURLOPT_READFUNCTION // 拥有两个参数的回调函数,第一个是参数是会话句柄,第二是HTTP响应头信息的字符串。使用此函数,将自行处理返回的数据。返回值为数据尺寸。
CURLOPT_WRITEFUNCTION // 拥有两个参数的回调函数,第一个是参数是会话句柄,第二是HTTP响应头信息的字符串。使用此回调函数,将自行处理响应头信息。响应头信息是整个字符串。设置返回值为字符串长度
CURLINFO_EFFECTIVE_URL // 最后一个有效的URL地址
CURLINFO_HTTP_CODE // 最后一个收到的HTTP代码
CURLINFO_FILETIME // 远程获取文档的时间,如果无法获取,则返回值为“-1”
CURLINFO_TOTAL_TIME // 最后一次传输所消耗的时间
CURLINFO_NAMELOOKUP_TIME // 名称解析所消耗的时间
CURLINFO_CONNECT_TIME // 建立连接所消耗的时间
CURLINFO_PRETRANSFER_TIME // 从建立连接到准备传输所使用的时间
CURLINFO_STARTTRANSFER_TIME // 从建立连接到传输开始所使用的时间
CURLINFO_REDIRECT_TIME // 在事务传输开始前重定向所使用的时间
CURLINFO_SIZE_UPLOAD // 上传数据量的总值
CURLINFO_SIZE_DOWNLOAD // 下载数据量的总值
CURLINFO_SPEED_DOWNLOAD // 平均下载速度
CURLINFO_SPEED_UPLOAD // 平均上传速度
CURLINFO_HEADER_SIZE // header部分的大小
CURLINFO_HEADER_OUT // 发送请求的字符串
CURLINFO_REQUEST_SIZE // 在HTTP请求中有问题的请求的大小
CURLINFO_SSL_VERIFYRESULT // 通过设置CURLOPT_SSL_VERIFYPEER返回的SSL证书验证请求的结果
CURLINFO_CONTENT_LENGTH_DOWNLOAD // 从Content-Length: field中读取的下载内容长度
CURLINFO_CONTENT_LENGTH_UPLOAD // 上传内容大小的说明
CURLINFO_CONTENT_TYPE // 下载内容的Content-Type:值,NULL表示服务器没有发送有效的Content-Type: header

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注