linux curl 使用详解 常见应用

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

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
相关文章
|
2月前
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
|
2月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
73 3
|
2月前
|
Web App开发 Linux 数据安全/隐私保护
Linux curl命令详解
Linux curl命令详解
|
2月前
|
存储 监控 Linux
在Linux中,如何进行虚拟化技术的应用?
在Linux中,如何进行虚拟化技术的应用?
|
2月前
|
存储 监控 Linux
在Linux中,如何进行容器技术的应用?
在Linux中,如何进行容器技术的应用?
|
2月前
|
算法 Ubuntu Linux
在Linux中,对比apt和yum两种包管理器在不同Linux发行版中应用有何区别?
在Linux中,对比apt和yum两种包管理器在不同Linux发行版中应用有何区别?
|
2月前
|
存储 Linux 网络安全
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
|
2月前
|
JavaScript Linux
【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided
【Azure App Service for Linux】NodeJS镜像应用启动失败,遇见 RangeError: Incorrect locale information provided
|
2月前
|
JavaScript Linux API
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
|
2月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败

热门文章

最新文章