龙空技术网

一文了解curl常用及特殊用法

hackfox 1127

前言:

如今我们对“php curl设置cookie”大致比较关心,大家都想要剖析一些“php curl设置cookie”的相关知识。那么小编同时在网摘上网罗了一些对于“php curl设置cookie””的相关知识,希望朋友们能喜欢,同学们一起来了解一下吧!

curl脑图

一、常规用法

最常用的是直接请求,默认是GET方法

curl <;
1.1 自定义header

添加header使用 -H, --header

curl -H "X-MY-HEADER: abc" <;

如果想添加多个header,那么就写多次

curl -H "X-MY-HEADER: abc" -H "X-MY-HEADER2: def" <;
1.2 请求方法

有些时候想要post或者put请求,可以使用 -X, --request <method> 来自设置

curl -X POST <;

当post的时候想要传输body参数,可以使用 -d, --data <data> 来设置

curl -X POST -d "name=abc&gender=0" <;或者curl -X POST -d name=bac -d gender=0 <;
1.3 设置cookie

需要添加cookie来请求,可以使用 -b, --cookie 来设置

curl -b "token=abcdef;uid=123123" <;

那如果想要把返回的cookie存储起来呢,可以用 -c, --cookie-jar <file> 来设置存储的位置

curl -c cookie.txt <;
1.4 结果输出到文件

需要把请求的返回结果输出到文件,以便查看分析,可以用 -o, --output <file> 来设置输出到的文件

curl -o baidu.html <;

示例如下图,会打印出整体进度和统计

二、多种协议

curl被人熟知的是系统自带的用来请求HTTP url的工具。但是,其不但可以处理http协议,还可以处理:FILE, FTP, FTPS, GOPHER, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP等。。。这么多协议,怎样,功能是不是很强大。

用来发送邮件

curl --mail-from "abc@def.com" --mail-rcpt "12345566@qq.com" --upload-file mail.txt --user "user_name:password" --url "smtp://mail.qq.com"
上传文件,使用 -T, --upload-file <file> 参数,同时可以批量上传, 用[] 来设置范围,示例如下。同时,下面会讲解如何处理多个url同时请求的情况。
curl -T "img[1-1000].png" <;或者curl --upload-file "{file1,file2}" <;
三、多个请求

最简单的使用方式是:curl <; ,但是偶尔会有想同时请求多个url,能不能办的到呢,当然可以

curl https://{baidu,cnblogs}.com

这样的话就会顺序请求 、 这两个网站。(PS: 终端里显示{ 或}之前有\,是终端做的转义功能,请忽略。)

又有说请求的url不一定都是.com结尾呢,能不能办呢,那必须可以

curl https://{baidu.com,csdn.net}

又有人较真说,我请求的多个url协议都是不同的,比如:curl {<;, <;} , 能不能这么请求呢,那不好意思,这样不行,会解析错误。

这种用法多用于某个站点多种path或query的情况,比如

四、使用代理

可以使用 -x,--proxy [protocol://]host[:port] 参数 代理来请求目标网站

curl --proxy <; <;

使用http的代理是可以来请求https目标网站的,其中原理是使用了http的proxy tunnel功能,这个在后续文章中会做详细介绍。

五、请求详情

有些时候想要知道详细的请求情况,比如怎么建立连接的,请求过程是如何的,那么可以这么来用,使用 -v ,--verbose

curl -v <;
六、请求追踪

有了上面的详细请求可能还不太满足一些需求,比如想要知道花费建立连接时间、传输时间、相应时间等详细的性能信息,这个对于最终网络问题很有帮助,那么怎么办呢。

那就要拿出一个厉害的参数:-w, —write-out

比如下面的例子可以输出:发起链接时间,开始传输时间以及总花费时间。

curl -w 'time_connect %{time_connect}s\\ntime_starttransfer %{time_starttransfer}s\\ntime_total %{time_total}s\\n' <;

可以来一个更详细的追踪

curl -w 'http_code: %{http_code}\\ncontent_type: %{content_type}\\ntime_namelookup: %{time_namelookup}\\ntime_connect: %{time_connect}\\ntime_appconnect: %{time_appconnect}\\ntime_redirect: %{time_redirect}\\ntime_pretransfer: %{time_pretransfer}\\ntime_starttransfer: %{time_starttransfer}\\nspeed_download: %{speed_download}\\nspeed_upload: %{speed_upload}\\nsize_download: %{size_download}\\nsize_upload: %{size_upload}\\n---------\\n time_total: %{time_total}\\n' <;

结果如下图

-w 可以使用的变量比较多,常用的如下表所示:

url_effective 上次访问的URLhttp_code 上一次 HTTP 或 FTP 数据传输过程中的 response 数值代码http_connect 上一次 CONNECT 请求中的数值代码time_total 数据传输消耗的总时间,以秒为单位,精度为毫秒。time_namelookup 从数据传输开始到域名解析完成所花费的时间。 以秒为单位time_connect TCP连接建立成功所花费的时间。 以秒为单位time_appconnect 应用层协议,如 SSL/SSH、三次握手等过程完成所花费的时间。 以秒为单位time_redirect 从跳转链接被激活到真正开始从跳转链接下载数据所经过的时间。 以秒为单位time_starttransfer 从请求连接开始,到第一个字节被传送前所经过的时间。 以秒为单位size_download 数据传输过程中下载的总数据大小。以字节为单位size_upload 数据传输过程中上传的总数据大小。以字节为单位size_header 下载的数据包中,header 字段的总数据大小。以字节为单位size_request 被发送的 HTTP request 的总数据大小。以字节为单位speed_download 整个数据传输过程中的平均数据下载速度。 以字节为单位speed_upload 整个数据传输过程中的平均数据上传速度。 以字节为单位content_type 被请求访问的文件的 Content_Type 类型。num_redirects 访问请求中包含的跳转链接数量。redirect_url 跳转链接指向的URL ssl_verify_result SSL验证的结果。值为 0 时表示验证成功。七、设置重试

可以设置失败请求重试次数,以及最大重试次数、超时时间等。

—retry <num> 设置重试次数—retry-delay <seconds> 设置重试时等待时间,秒级—retry-max-time <seconds> 设置最大重试时间-m, —max-time <seconds> 设置最大请求时间,即超时时间

例如,设置重复次数请求一个不存在的url

curl --retry 3 --retry-delay 1 --retry-max-time 10 <;

例如,设置超时时间来请求

curl -m 1 <;

标签: #php curl设置cookie