-L
(HTTP/HTTPS)追随http响应头“Location:”定向到跳转后的页面;
(在http响应码为3XX时使用,如301跳转、302跳转)
-X
curl默认请求是get,用X可以请求别的动作,比如POST
-d 也写作 --data
接带上的请求数据
curl -X POST -d “data=xxx” www.example.com/form.cgi
带上数据的POST请求
--header "xxx"
带上请求头数据。
-I 只显示响应头,不显示返回内容
-i 显示响应头 + 返回内容
-v
参数可以显示一次 http 通信的整个过程,包括端口连接和 http request 头信息。
--trace
显示比-v 更详细的信息,并记录到文件中
curl --trace output.txt www.sina.com
curl --trace-ascii output.txt www.sina.com
-k 跳过ssl检测,用于https而不报错。
能处理https的报错 :Unable to communicate securely with peer: requested domain name does not match the server's certificate. 情况
-- insecure
一个IP可有几个域名的,证书是和域名相互认证,而不是和IP
所以用curl 直接去连IP可能不成功,会提示not match 证书
curl可以通过跳过证书认证的方式,末尾加上 -- insecure 或者 换成证书注册的域名以后就可以了。
-O 下载文件
显示进度条 -#
curl -# -O https://www.gaojs.com.cn
下载保存固定的文件名中
curl -# -o xxx(文件名) https://www.gaojs.com.cn
从ftpserver中下载文件
curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG
curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG
指定IP访问某域名
在 curl 中,如果想以指定的 ip 来请求一个域名地,可以使用
curl http://127.0.0.1/example -H 'Host: www.example.org'
这种指定 Host 头的做法。
但这在 https 中可能会失败,显示 no alternative certificate subject name matches target host name 127.0.0.1。
显然这是由于 curl 将 https://127.0.0.1 里的 127.0.0.1 而不是 Host 头用于验证证书的 subject name,而这个 ip 如果不在证书的 subject names 中,将会导致证书验证失败。
一般的解决方案,我们可以在 /etc/hosts 或 dnsmasq 用指定 ip 解析这个域名,但这改起来显示比较繁琐。还好在 curl 7.21.3 中,提供了一个 --resolve ' 的参数,让我们可以很方便地将域名解析到指定的 ip 上,例如上面的请求可以改成
curl --resolve 'www.example.org:443:127.0.0.1' https://www.example.org
双引号
当url中有多个参数的时候,需要用双引号引起来。
不然其中的 & 会被当做是丢入后台的指令。
正确写法是