Curl命令

Curl命令

  • 1、命令格式
  • 2、参数详解
    • -A
    • -b
    • -c
    • -d
    • --data-urlencode
    • -e
    • -F
    • -G
    • -H
    • -i
    • -I
    • -k
    • -L
    • --limit-rate
    • -m
    • -o/-O
    • -r
    • -s/-S
    • -T
    • -u
    • -v
    • --trace
    • -w
    • -x
    • -X
    • -y/-Y
    • --local-port
  • 3、使用示例

curl(Command Line URL Viewer),一种常用的命令行工具,用来请求Web服务器,发送网络请求。它支持多种传输协议,包括HTTP、HTTPS、SCP、FTP、TELNET等,可以使用其进行发送请求,上传/下载文件,且支持aksk身份验证,代理支持等。

1、命令格式

curl [options] [URL]

2、参数详解

-A

-A用来指定客户端的用户代理标头,即User-Agent。有时候server会阻止curl的下载请求,这时可以通过修改User-Agent来模拟正常使用者发出的请求。

curl -A "user-agent-string" [URL]

其中是希望设置的用户代理字符串。

示例:模拟谷歌浏览器发送请求

curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://www.baidu.com

-b

-b参数用来向服务器发送Cookie。Cookie 是服务器在客户端存储的小段数据,用于跟踪用户的会话状态或记录其他有关用户的信息。

curl -b "" [URL]
curl -b cookie_file [URL]

是包含一个或多个 cookie 的字符串。

示例:

向Google发送一个token为abcdef,session_360681199812141356为123456的cookie

curl -b "user_token=abcdef; session_id=123456" https://www.baidu.com

读取本地文件发送到服务器

curl -b cookies.txt https://www.baidu.com

-c

-c参数是将服务器设置的cookie写入一个文件。

curl -c cookies.txt https://www.baidu.com

-b和-c可以配合使用。


-d

-d参数用来发送POST请求的数据体。

curl -X POST https://www.baidu.com -d '{"user_name":"minh", "password":"123456"}'

使用-d参数,HTTP请求会自动加上标头Content-Type : application/x-www-form-urlencoded,并且会自动将请求转为POST方式,因此可以省略-X POST。

-d参数也可以读取本地文本文件的数据作为数据体向服务器发送。示例:

curl -d '@local_file.txt' https://www.baidu.com

注:-d是发送post请求,-F是发送form-data数据,两者不能同时使用,否则会报错。


–data-urlencode

-data-urlencode参数等同于-d,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。示例:发送的字符串中间有个空格,此时需要对其进行URL编码。

curl --data-urlencode 'content=hello world' https://www.baidu.com

-e

-e参数用来设置HTTP的标头Referer,表示请求来源。部分server为了避免盗链问题会确认引用源是否来自同一个网站,此时就要欺骗服务器的检查机制来取得相关资源。

curl -e "www.google.com" https://www.baidu.com
curl -L -v -e ";auto" https://www.baidu.com # 某些连接必须通过301或302跳转过去时,用auto参数来让访问更加真实

-H参数也可以通过直接添加标头Referer达到和-e同样的效果。示例:

curl -H 'Referer: www.google.com' https://www.baidu.com

-F

-F参数用于通过 POST 请求以表单形式发送数据。这个选项主要用于模拟 HTML 表单的文件上传,但也可以用于普通表单字段。

示例:发送username和password两个表单字段。

curl -F "username=minh" -F "password=******" https://www.baidu.com/login

也可以指定文件名,使用 @ 符号指定文件路径

curl -F "file=@/path/to/file.txt" https://www.baidu.com/upload

-G

-G参数用于将请求参数附加到URL中,以进行GET请求。该选项会将所有数据作为查询参数附加到URL的末尾,而不是将其放在请求体中。

示例:

curl -G "https://www.baidu.com/search" -d "name=WeThree" -d "category=books"

该请求实际的URL为:https://google.com/search?category=books&name=WeThree

其中,如果需要URL编码,-d可以替换成–data–urlencode


-H

-H参数用于添加HTTP请求的标头。

curl -H 'Content-Type: application/json' https://www.baidu.com/login
curl -H 'Accept-Language: en-US' https://www.baidu.com

-i

-i参数用于打印出服务器回应的HTTP标头。标头和源码都会输出。

curl -i https://www.baidu.com

上面命令收到服务器回应后,先输出服务器回应的标头,然后空一行,再输出网页的源码。


-I

-I参数用于向服务器发送HEAD请求,将服务器返回的HTTP标头打印出来。只打印标头

curl -I https://www.baidu.com
等价于
curl -head https://www.baidu.com

-k

-k参数用于忽略SSL证书验证。在默认情况下,curl会验证服务器的SSL证书,确保通信的安全性。然而,有时候你可能连接到一个使用自签名证书或无效证书的服务器,此时你可能会遇到SSL验证失败的问题。

curl -k https://baidu.com

-L

-L参数会让HTTP请求跟随服务器的重定向。curl默认不跟随重定向。比如我们在访问谷歌或百度时,URL没有加上www前缀,会自动触发301或302跳转

curl -L https://baidu.com
等价于
curl https://www.baidu.com

–limit-rate

–limit-rate参数用来限制HTTP请求和回应的带宽,模拟慢网速的环境。示例:将带宽限制在每秒 200K 字节

curl --limit-rate 200k https://www.baidu.com

-m

-m参数用于设置请求的最大执行时间,即超时时间。如果一个请求在指定的时间内没有完成,curl 将会中止该请求。

curl -m 10 https://www.baidu.com # 单位:s

在实际应用中,设置适当的超时时间是很重要的。如果你的应用程序依赖于远程服务,而这个服务在一定时间内没有响应,你可能希望在超时后采取某些处理措施,例如记录错误、重试请求等。


-o/-O

-o/-O参数将服务器的回应保存成文件,等同于wget命令。区别在于-O会将URL的最后部分当作文件名。

 curl -o example.html https://www.example.com # 文件名为example.html
 curl -O https://www.example.com/minh/secret.html # 文件名为secret.html

-r

-r参数用于指定一个范围,仅请求文件的一部分而非整个文件。通常用于下载文件的一部分,支持 HTTP、FTP 协议。

curl -r <start>-<end> [URL]

示例:

curl -r 100-500 https://example.com/largefile.zip -o partialfile.zip

指定下载 https://example.com/largefile.zip 文件的第101到501字节的范围,并将其保存为 partialfile.zip

需要注意的是,不是所有的服务器都支持范围请求,因此使用 -r 参数时要确保服务器支持这个特性。

如果服务器支持范围请求,它会在响应的 Content-Range 头中返回当前范围的信息。否则,curl 将会下载整个文件。


-s/-S

-s/-S参数用于不输出/只输出错误和进度信息。

curl -s https://www.example.com

如果想让curl不产生任何输出,可以使用:

curl -s -o /dev/null https://www.example.com

-T

-T参数用于向服务器上传文件。它支持多种协议,包括 HTTP、HTTPS、FTP、FTPS 等。

# 上传指定文件到server,并指定上传后的文件名为myfile
curl -T uploadfile -u user:passwd https://www.example.com/upload/myfile
# 上传指定文件到server,并沿用本地文件名
curl -T uploadfile -u user:passwd https://www.example.com/upload/
# -a:使用追加的方式上传文件
curl -T uploadfile -a https://www.example.com/upload/myfile

-u

-u参数用来设置用户名和密码。

curl -u 'username:password' https://www.example.com/login
curl -u 'username' https://www.example.com/login # 只指定用户名

-v

-v参数用于输出一次http通信的完整过程。

curl -v https://www.example.com

–trace

–trace参数也用于调试,用于输出请求详细的信息,还会输出原始的二进制数据。

curl --trace - https://www.example.com
curl --trace trace.txt https://www.example.com # 将详细信息输出到指定文件

-w

-w参数用于定义输出格式,允许用户自定义curl命令的输出信息。可以通过指定一系列变量来定义输出格式,这些变量将在请求完成后替换为实际的数据。示例:

curl -w "HTTP status: %{http_code}\nTotal time: %{time_total}\n" https://www.example.com

curl会在请求完成后将http_code和time_total替换成实际数值,并输出到标准输出。常见的输出变量包括:

%{http_code}: 显示HTTP响应状态码;

%{time_total}: 显示请求的总时间;

%{url_effective}: 有效的请求URL;

%{time_namelookup}: DNS解析所花费的时间;

%{time_connect}: 建立连接所花费的时间;

%{time_pretransfer}: 从发起请求到开始传输之间所花费的时间。

完整的输出变量列表参考:curl -w, --write-out documentation


-x

-x参数用于指定HTTP请求的代理,使用代理服务器。

curl -x 111.222.33.4:8888 http://www.baidu.com
# 如果代理服务器需要账号密码,可以使用 -U 或 --proxy-user 来指定
curl -u username:password -x 111.222.33.4:8888 http://www.baidu.com
# 不使用代理访问
curl --noproxy localhost,get.this http://www.baidu.com

-X

-X参数用于指定HTTP请求的方法。

curl -X GET https://www.baidu.com
curl -X PUT https://www.baidu.com/upload?key=minh\&value=golden
curl -X POST https://www.baidu.com/login -d '{"name":"minh", "password":"******"}'

-y/-Y

-y/-Y参数用于限制下载速度。

# 限制curl的下载速度在每秒3000字节以内,保持60秒
curl -Y 3000 -y 60 www.example.com

–local-port

–local-port参数用于强制使用本地端口号

curl --local-port 8888 https://www.example.com

3、使用示例

user='minh:123456'
header='Content-Type: application/json'
book_param='{"category":"books", "type":"literature"}'
book_name='name=We Three'
curl -s -G -X GET -u ${user} -H ${header} https://www.example.com -d ${book_param} --data-urlencode ${book_name} -kv

参考:

curl官网文档:https://curl.se/docs/manpage.html

你可能感兴趣的:(shell,curl,web)