linux curl 使用详解 常见应用

简介:

curl


1 http 超时

-m 指定超时的时间 等于--connect-timeout


2 输出到空

-o /dev/null 不输出,正常是输出html格式


3 -w 指定格式输出


4 -s 去掉所有状态信息的输出


5 -F 上传表单


6 -e/--referer <URL>  指定referer


7 -H/--header <header> 指定Header头部


8 -v 查看详细的请求建立信息,可以看到request的Header头部


9 -L 当重定向的时候,发起新的请求


10 --user 认证的用户名


11 -XGET  请求方式,默认是GET


12 --data-binary  以二进制的方式上传,没有任何处理

 

13 --data-urlencode 大致等同于-d 或者--data


14 -o Write output to <file> instead of stdout


15 -x 代理访问


三者区别:

-d/--data is the same as --data-ascii. To post data purely binary, you should instead use the --data-binary option. To URL-encode  the

value of a form field you may use --data-urlencode.





应用一: 超时设置


curl -m 3 -o /dev/null -s -w %{http_code}"\n"  www.letuknowit.com


只输出状态码,并换行"\n"



注意如果超时 http_code 是 000



应用二: 探测web各个链路建立响应的时间点


curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total}:%{time_namelookup}"\n" http://www.canada.com


0.081:0.272:0.779:0.356


清单 1 给出对一个流行的新闻站点执行 curl 命令的情况.输出通常是 HTML 代码,通过 -o 参数发送到 /dev/null.-s 参数去掉所有状态信息.-w 参数让 curl 写出表 1 列出的计时器的状态信息:


表 1. curl 使用的计时器


计时器描述

time_connect建立到服务器的 TCP 连接所用的时间

time_starttransfer在发出请求之后,Web 服务器返回数据的第一个字节所用的时间

time_total完成请求所用的时间

time_namelookupDNS解析时间,从请求开始到DNS解析完毕所用时间(记得关掉 Linux 的 nscd 的服务测试)

speed_download下载速度,单位-字节每秒。

这些计时器都相对于事务的起始时间,甚至要先于 Domain Name Service(DNS)查询.因此,在发出请求之后,Web 服务器处理请求并开始发回数据所用的时间是 0.272 – 0.081 = 0.191 秒.客户机从服务器下载数据所用的时间是 0.779 – 0.272 = 0.507 秒.





应用三: 上传表单数据 上传图片

curl -e "http://www.kkfang.com/cuizhiliang" -F "filename=@./testtest_1111.jpg" "http://upload.kkfang.com/upload/housea.html"



示例:

-F/--form <name=content

curl -F "file=@localfile;filename=nameinpost" url.com



@后面接的是一个文件路径



应用四: 模拟修改Header头部


-H "Cache-Control:no-cache"

curl  -x127.0.0.1:6081 "http://www.kkfang.com/bj" -H "User-agent:"Googlebot""


多个Header头一起使用


curl -v -I -H "Host:www.kkfang.com" -H "User-Agent:Ba" http://www.kkfang.com


curl -v -I -H "Host:www.kkfang.com" -H "User-Agent:Ba"  -H "Cache-Control:no-cache" http://www.kkfang.com





应用五: 重定向的主站

curl -IL  http://www.dianping.com


会302 跳转到城市列表页 Location:/citylist


301重定向与302重定向的区别

  302重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。 SEO 302好于301

  301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。




应用六: --user  调用jenkins的api 获取配置文件

curl -XGET http://jenkins.anhouse.com.cn/job/ST-ananzu-service/config.xml --user cuizhiliang344:Czl110123






应用七: post数据,加上shell的变量传递,执行jenkins JOB并修改数据

/usr/bin/curl -m 5 -s -w %{http_code} -X POST JENKINS_URL/job/JOB_NAME/build --data-urlencode json='{"parameter": [{"name":"id", "value":"123"}, {"name":"'${_TASK_NAME}'", "value":"high"}]}'



上json数据  并且变量中存在变量

方法1: "'" ${shell变量}"'"

curl -s --url $QINIU_FLUX_API -X POST  -H "Content-Type: application/json"  -H "Authorization: $QINIU_FLUX_TOKEN"  -d '{

    "startDate": "'"$YESTERDAY"'",

    "endDate": "'"$YESTERDAY"'",

    "granularity": "day",

    "domains": "dfs.anhouse.com;img.anhouse.com;cdn-event.pinganfang.com;cdn-event.m.pinganfang.com"

}' > ${QINIU_FLUX_STATUS}


方法2: '${变量}' 如以下的两个区别

#值所在的代表值


1
2
3
4
5
6
7
8
declare  -A TYPE_ID
TYPE_ID=([internal]=0 [external]=1
         #注意上下区分 传递的类型不同
for  _type  in  external internal
do
         #/usr/bin/curl -s ${URLAPI} -H  "Content-type: application/json" -X POST -d '{"domain_type":"'"${TYPE_ID["${_type}"]}"'","total":"'"${_type_number}"'","stats_time":"'"${F_YESTERDAY}"'"}'
         /usr/bin/curl  -s ${URLAPI} -H   "Content-type: application/json"  -X POST -d  '{"domain_type":' ${TYPE_ID[ "${_type}" ]} ',"total":' ${_type_number} ',"stats_time":"' "${F_YESTERDAY} "'" }'
done



注释: 如果post上传的应用程序total参数只接受int型,那么只能用下面的方法,上面的方式会出现string的类型。


应用八: 输出内容

curl -s -XGET http://jenkins.anhouse.com.cn/job/ST-ananzu-service/config.xml --user cuizhiliang344:Czl110123   -o config.txt


或者使用> 进行重定向

curl -s -XGET http://jenkins.anhouse.com.cn/job/ST-ananzu-service/config.xml --user cuizhiliang344:Czl110123  > config.txt

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1962915如需转载请自行联系原作者

cuizhiliang
相关文章
|
1月前
|
存储 缓存 固态存储
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
|
2月前
|
Linux
linux查看应用对应的端口
linux查看应用对应的端口
19 0
|
2月前
|
网络协议 安全 Linux
linux系统安全及应用——端口扫描
linux系统安全及应用——端口扫描
41 0
|
20天前
|
Linux Android开发
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
13 0
|
1月前
|
Cloud Native Linux 网络虚拟化
深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性
在Linux网络虚拟化领域,虚拟以太网设备(veth)扮演着至关重要的角色🌐。veth是一种特殊类型的网络设备,它在Linux内核中以成对的形式存在,允许两个网络命名空间之间的通信🔗。这篇文章将从多个维度深入分析veth的概念、作用、重要性,以及在容器和云原生环境中的应用📚。
深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性
|
13天前
|
机器学习/深度学习 自然语言处理 Linux
【专栏】Linux 中的机器学习:Whisper适用于语音助手、翻译等领域,随着技术发展,其应用前景广阔
【4月更文挑战第28天】本文探讨了在Linux环境下,先进自动语音识别系统Whisper的运用与实现高效ASR。Whisper基于PyTorch,支持多语言识别,具有高准确性和实时性。文中介绍了安装配置Whisper的步骤,包括安装依赖、下载代码、配置环境变量及编译安装。通过数据准备、模型训练和识别,可实现语音识别功能。Whisper适用于语音助手、翻译等领域,随着技术发展,其应用前景广阔。
|
2天前
|
Linux 编译器 调度
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
本文介绍了如何将POSIX应用程序编译为在Xenomai实时内核上运行的程序。
17 1
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
|
2天前
|
消息中间件 存储 Linux
linux实时应用如何printf输出不影响实时性?
本文探讨了Linux实时任务中为何不能直接使用`printf(3)`,并介绍了实现不影响实时性的解决方案。实时任务的执行时间必须确定且短,但`printf(3)`的延迟取决于多个因素,包括用户态glibc缓冲、内核态TTY驱动和硬件。为确保实时性,通常将非实时IO操作交给低优先级任务处理,通过实时进程间通信传递信息。然而,即使这样,`printf(3)`在glibc中的实现仍可能导致高优先级任务阻塞。Xenomai 3提供了一个实时的`printf()`实现,通过libcobalt库在应用编译链接时自动处理,预分配内存,使用共享内存和线程特有数据来提高效率和实时性。
12 0
linux实时应用如何printf输出不影响实时性?
|
5天前
|
安全 Linux Shell
Linux常用命令详解与实战应用
【5月更文挑战第7天】本文详述了Linux常用命令,包括文件与目录操作(ls, cd, pwd, cp, mv, rm)、文本处理(cat, grep, sed)及系统管理(top, df, du)命令。通过实例演示了如何使用这些命令,帮助读者理解和掌握Linux操作,提升系统管理效率。学习和熟练运用这些基础命令,是高效使用Linux的关键。
|
10天前
|
Linux Shell 调度
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)