摘要
curl与wget的基本使用方法
本文基于CentOS8(x86_64)
curl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 curl url curl -u user:passwd url curl -o fileName url curl -C - -o fileName url curl url \ -X POST \ -d "{\"data\":\"content\"}" \ -H "content-type: application/json" curl url \ -X POST \ -d "name=zhangsan&age=30" -H "content-type: application/x-www-form-urlencoded" curl --data-urlencode 'name=张三' url curl -G -d 'name=zhangsan' -d 'age=30' url curl -F 'file=@photo.png;type=image/png;filename=me.png' -H "Content-Type: multipart/form-data" url curl -F 'file=@photo.png;type=image/png;filename=me.png' -F 'name=java' -H "Content-Type: multipart/form-data" url curl -F 'file=@photo.png;type=image/png;filename=me.png' -F 'jsonBody={"name":"java"};type=application/json' -H "Content-Type: multipart/form-data" url curl -O ftp://user:pass@ip:port/file curl -T file ftp://user:pass@ip:port/path
解决 curl: (60) SSL certificate problem: certificate has expired 的问题
发生问题的原因:
此时若不能更新网站证书,可以使用下面的命令忽略证书验证
1 2 3 4 5 6 7 curl --insecure https://www.example.com curl --insecure --verbose https://www.example.com curl -k https://www.example.com curl -k -v https://www.example.com
手动下载最新的根证书进行更新
1 2 3 4 5 6 curl-config --ca yum install curl-devel curl-config --version
命令行更新根证书(推荐
)
1 yum update -y ca-certificates
在 curl 命令执行失败或者返回状态码不为 200 时打印信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/bin/bash curl_output=$(curl --retry 3 -m 10 -I -s -o /dev/null -w "%{http_code}" http://localhost:8080/test.html) exit_status=$? if [ $exit_status -ne 0 ] || [ $curl_output -ne 200 ]; then current_time=$(date +"%Y-%m-%d %H:%M:%S" ) echo "curl 命令执行失败,或者返回的状态码不为 200,当前系统时间为:$current_time " fi
参数解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 --retry 3:重试 3 次。 -m 10:设置单个请求的最大请求时间为 10 秒。如果服务器在 10 秒内没有响应,curl 将中断请求。 -I:仅请求头。-I 参数告诉 curl 发送 HEAD 请求而不是默认的 GET 请求,这样服务器将只返回 HTTP 头信息而不返回实际内容。 -s:静默模式。-s 参数告诉 curl 在执行时不显示进度条或错误信息,只输出请求的结果。 -o /dev/null:将输出重定向到 /dev/null,这个设备是一个特殊的文件,会将所有写入的数据都丢弃。由于我们只关心 HTTP 状态码,而不关心输出内容,因此将其重定向到 /dev/null 是合理的。 -w "%{http_code}" :自定义输出格式。-w 参数允许您指定 curl 命令输出的格式。在这里,%{http_code} 表示将输出 HTTP 响应的状态码。 您还可以指定其他内容,例如: %{time_total}:总请求时间,包括 DNS 解析、连接、传输和重定向时间。 %{time_namelookup}:DNS 解析时间。 %{time_connect}:建立连接时间。 %{time_starttransfer}:服务器开始响应时间。 %{size_download}:下载的数据大小。 %{size_upload}:上传的数据大小。 %{url_effective}:最终请求的 URL。 %{content_type}:返回的内容类型。 %{remote_ip}:远程服务器 IP 地址等。
小贴士
有些系统没有默认安装curl,可以通过yum install curl -y
的方式进行安装,也可以通过源码进行安装,这里给出源码安装的过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 yum install gcc cmake openssl openssl-devel wget https://github.com/curl/curl/releases/download/curl-8_0_1/curl-8.0.1.tar.gz tar -zxcf curl-8.0.1.tar.gz cd curl-8.0.1mkdir buildcd buildcmake .. make && make install ldconfig -v
wget
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 wget url wget -O saveFile url wget -i file.txt wget -c -t 5 url wget -r -l 5 url wget -nc -T 5 url wget --limit-rate=1m url wget --ftp-user=USERNAME --ftp-password=PASSWORD ftp://url wget --no-check-certificate https://xxxxx
小贴士
一般情况下我们都是在比较简单的GET
请求下使用wget
,实际上wget
也支持一些复杂的场景
1 2 wget --post-data 'key1=value1&key2=value2' http://example.com/resource
1 wget --header="Accept-Encoding: gzip" --header="User-Agent: My-App-Name/0.0.1" http://example.com
1 2 3 4 5 6 7 wget --header="Cookie: name=value" http://example.com wget --header="Cookie: name1=value1" --header="Cookie: name2=value2" http://example.com wget --load-cookies cookies.txt http://example.com 0) 自动导出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://example.com wget -m --accept=rar url wget -m --reject=gif url