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