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