php curl详解

在介绍php的中curl之前,先看看curl的几个不同意思

curl的不同含义

1.curl指的是curl命令行工具,可以从命令行或者脚本或者批处理文件中运行curl。curl创建于1998年,并且提供了100多个选项去控制它。
2.cURL是一个软件项目的名字。该软件项目包含了上面所说的curl和libcurl,并且都是开源的。
3.CURL通常用作PHP中libcurl扩展的名字。这个扩展确保了PHP程序员在程序中可以访问libcurl库所提供的功能。

libcurl—库
1.用作其他程序的开发库
2.可以与许多语言想结合,如PHP、C++
3.跨平台
4.提供了多种不同的使用它的APIs

在php中一些简单的取远程内容操作,我们可以使用file_get_contents即可,但是遇到复杂的HTTP POST、HTTP PUT、 FTP 上传,却没有办法操作,还好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和用户名+密码的认证。

列表CURL库一共有17个函数
            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版本

常用设置选项布尔值选项

php中的curl的使用主要是要弄清楚各个选项的含义,可以参考本文或者php手册

            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

转自:http://blog.csdn.net/msda/article/details/38047809/

参考:https://vace.me/20160123-php-curl-detailed-usage.html

简单应用案例

构造一个简单的post请求,提交username和age到指定页面

function curl_post($url,$data=[]){
$ch = curl_init();
curl_setopt_array($ch,[
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_POSTFIELDS => $data
]);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$post = curl_post('http://httpbin.org/post',['username'=>'vace','age'=>23]);
print_r($post);

使用cURL获取cookies并保存到本地

/**
 * [curl_cookies 使用curl发送和保存cookies]
 * @param  [type] $url       [访问URL]
 * @param  [type] $save_path [cookies的保存地址]
 * @return [type]            [设置cookies后的内容]
 */
function curl_cookies($url,$save_path){
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_COOKIEJAR => $save_path,
CURLOPT_COOKIEFILE => $save_path
]);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
echo curl_cookies('http://httpbin.org/cookies/set?cookie1=vace','./cookies.log');

然后在脚本运行目录会生成 cookies.log打开内容如下 cookie1 vace为cookies内容
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
httpbin.org FALSE / FALSE 0 cookie1 vace

实现一个cURL类
这样的cURL使用比较麻烦,我们可以自己实现需要的curl操作类(这里只是简单演示一下,推荐一个比较齐全的CURL操作库A Chainable, REST Friendly, PHP HTTP Client. A sane alternative to cURL)

代码参考:https://vace.me/20160123-php-curl-detailed-usage.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值