curl 订阅
cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。 展开全文
cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
信息
适用范围
计算机
类    别
用URL语法
作    用
文件传输
中文名
curl
外文名
curl(CommandLine Uniform Resource Locator)
curl简介
cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。curl还支持SSL认证、HTTP POST、HTTP PUT、FTP上传, HTTP form based upload、proxies、HTTP/2、cookies、用户名+密码认证(Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos)、file transfer resume、proxy tunneling。 [1] 
收起全文
精华内容
下载资源
问答
  • curl
    千次阅读
    2020-08-14 19:11:42

    curl命令大全

    简介

    curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。

    它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7aHduX6w-1597403478458)(https://www.wangbase.com/blogimg/asset/201909/bg2019090501.jpg)]

    不带有任何参数时,curl 就是发出 GET 请求。

    $ curl https://www.example.com
    

    上面命令向www.example.com发出 GET 请求,服务器返回的内容会在命令行输出。

    -A

    -A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]

    $ 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://google.com
    

    上面命令将User-Agent改成 Chrome 浏览器。

    $ curl -A '' https://google.com
    

    上面命令会移除User-Agent标头。

    也可以通过-H参数直接指定标头,更改User-Agent

    $ curl -H 'User-Agent: php/1.0' https://google.com
    

    -b

    -b参数用来向服务器发送 Cookie。

    $ curl -b 'foo=bar' https://google.com
    

    上面命令会生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。

    $ curl -b 'foo1=bar;foo2=bar2' https://google.com
    

    上面命令发送两个 Cookie。

    $ curl -b cookies.txt https://www.google.com
    

    上面命令读取本地文件cookies.txt,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器。

    -c

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

    $ curl -c cookies.txt https://www.google.com
    

    上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt

    -d

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

    $ curl -d'login=emma&password=123'-X POST https://google.com/login
    # 或者
    $ curl -d 'login=emma' -d 'password=123' -X POST  https://google.com/login
    

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

    -d参数可以读取本地文本文件的数据,向服务器发送。

    $ curl -d '@data.txt' https://google.com/login
    

    上面命令读取data.txt文件的内容,作为数据体向服务器发送。

    –data-urlencode

    --data-urlencode参数等同于-d,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。

    $ curl --data-urlencode 'comment=hello world' https://google.com/login
    

    上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。

    -e

    -e参数用来设置 HTTP 的标头Referer,表示请求的来源。

    curl -e 'https://google.com?q=example' https://www.example.com
    

    上面命令将Referer标头设为https://google.com?q=example

    -H参数可以通过直接添加标头Referer,达到同样效果。

    curl -H 'Referer: https://google.com?q=example' https://www.example.com
    

    -F

    -F参数用来向服务器上传二进制文件。

    $ curl -F 'file=@photo.png' https://google.com/profile
    

    上面命令会给 HTTP 请求加上标头Content-Type: multipart/form-data,然后将文件photo.png作为file字段上传。

    -F参数可以指定 MIME 类型。

    $ curl -F 'file=@photo.png;type=image/png' https://google.com/profile
    

    上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为application/octet-stream

    -F参数也可以指定文件名。

    $ curl -F 'file=@photo.png;filename=me.png' https://google.com/profile
    

    上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png

    -G

    -G参数用来构造 URL 的查询字符串。

    $ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search
    

    上面命令会发出一个 GET 请求,实际请求的 URL 为https://google.com/search?q=kitties&count=20。如果省略--G,会发出一个 POST 请求。

    如果数据需要 URL 编码,可以结合--data--urlencode参数。

    $ curl -G --data-urlencode 'comment=hello world' https://www.example.com
    

    -H

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

    $ curl -H 'Accept-Language: en-US' https://google.com
    

    上面命令添加 HTTP 标头Accept-Language: en-US

    $ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com
    

    上面命令添加两个 HTTP 标头。

    $ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login
    

    上面命令添加 HTTP 请求的标头是Content-Type: application/json,然后用-d参数发送 JSON 数据。

    -i

    -i参数打印出服务器回应的 HTTP 标头。

    $ curl -i https://www.example.com
    

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

    -I

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

    $ curl -I https://www.example.com
    

    上面命令输出服务器对 HEAD 请求的回应。

    --head参数等同于-I

    $ curl --head https://www.example.com
    

    -k

    -k参数指定跳过 SSL 检测。

    $ curl -k https://www.example.com
    

    上面命令不会检查服务器的 SSL 证书是否正确。

    -L

    -L参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。

    $ curl -L -d 'tweet=hi' https://api.twitter.com/tweet
    

    –limit-rate

    --limit-rate用来限制 HTTP 请求和回应的带宽,模拟慢网速的环境。

    $ curl --limit-rate 200k https://google.com
    

    上面命令将带宽限制在每秒 200K 字节。

    -o

    -o参数将服务器的回应保存成文件,等同于wget命令。

    $ curl -o example.html https://www.example.com
    

    上面命令将www.example.com保存成example.html

    -O

    -O参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名。

    $ curl -O https://www.example.com/foo/bar.html
    

    上面命令将服务器回应保存成文件,文件名为bar.html

    -s

    -s参数将不输出错误和进度信息。

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

    上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。

    如果想让 curl 不产生任何输出,可以使用下面的命令。

    $ curl -s -o /dev/null https://google.com
    

    -S

    -S参数指定只输出错误信息,通常与-s一起使用。

    $ curl -s -o /dev/null https://google.com
    

    上面命令没有任何输出,除非发生错误。

    -u

    -u参数用来设置服务器认证的用户名和密码。

    $ curl -u 'bob:12345' https://google.com/login
    

    上面命令设置用户名为bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym9iOjEyMzQ1

    curl 能够识别 URL 里面的用户名和密码。

    $ curl https://bob:12345@google.com/login
    

    上面命令能够识别 URL 里面的用户名和密码,将其转为上个例子里面的 HTTP 标头。

    $ curl -u 'bob' https://google.com/login
    

    上面命令只设置了用户名,执行后,curl 会提示用户输入密码。

    -v

    -v参数输出通信的整个过程,用于调试。

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

    --trace参数也可以用于调试,还会输出原始的二进制数据。

    $ curl --trace - https://www.example.com
    

    -x

    -x参数指定 HTTP 请求的代理。

    $ curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com
    

    上面命令指定 HTTP 请求通过myproxy.com:8080的 socks5 代理发出。

    如果没有指定代理协议,默认为 HTTP。

    $ curl -x james:cats@myproxy.com:8080 https://www.example.com
    

    上面命令中,请求的代理使用 HTTP 协议。

    -X

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

    $ curl -X POST https://www.example.com
    

    es:cats@myproxy.com:8080 https://www.example.com

    上面命令指定 HTTP 请求通过myproxy.com:8080的 socks5 代理发出。

    如果没有指定代理协议,默认为 HTTP。

    $ curl -x james:cats@myproxy.com:8080 https://www.example.com
    

    上面命令中,请求的代理使用 HTTP 协议。

    -X

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

    $ curl -X POST https://www.example.com
    

    上面命令对https://www.example.com发出 POST 请求。

    更多相关内容
  • curl-7.46.0-win64

    热门讨论 2017-12-10 14:50:43
    官方最新版本 安装时请使用默认设置,安装完成后可以打开一个命令行窗口,输入 curl,如果提示 curl: try 'curl --help' or 'curl --manual' for more information 就表示安装成功了。
  • curl.exe curl-7.53.1-win64

    2017-02-28 19:32:40
    curl-7.53.1-win64-mingw.7z。windows的curl.exe。直接在当前目录下的cmd中执行curl即可
  • CURL命令详解

    万次阅读 2021-12-29 11:27:19
    curl -v http://ip:port/service/name/op?param1=1\&param2=0\&param3="\[\{\"value\":1,\"value\":1\}\]" 能正常发送,但服务器端接收不到参数,原因大概是service只接受post请求 curl -v --globoff ...

    curl -v http://ip:port/service/name/op?param1=1\&param2=0\&param3="\[\{\"value\":1,\"value\":1\}\]"     能正常发送,但服务器端接收不到参数,原因大概是service只接受post请求
    curl -v --globoff http://ip:port/service/name/op?param1=1\&param2=0\&param3="[{\"value\":1,\"value\":1}]"     同上,与上面的请求的区别是加了globoff,参数里面的括号不用转义

    尝试用post方式发送:

    curl http://ip:port/service/name/op -X POST -H "Content-type:application/json" -d '{"param1":"16","param2":"0","param3":"[{\"value\":1,\"num\":1}]"}'    能正常发送,但服务器仍然接收不到参数

    curl http://ip:port/service/name/op -X POST -d 'param1=16&param2=0&param3=[{"value":1,"value":1}]'     能正常发送,服务器端能正常获取参数

    该命令设计用于在没有用户交互的情况下工作。

    curl 是一个工具,用于传输来自服务器或者到服务器的数据。「向服务器传输数据或者获取来自服务器的数据」

    可支持的协议有(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、TELNET和TFTP)。

    curl提供了大量有用的技巧,比如代理支持、用户身份验证、FTP上传、HTTP post、SSL连接、cookie、文件断点续传、Metalink等等。正如你将在下面看到的,这些特性的数量会让您头晕目眩!
     

    访问的URL

    你可以在命令行上指定任意数量的url。它们将按指定的顺序依次获取。

    你可以指定多个url,或url的部分通过在花括号内编写部分集,如:

    http://site.{one,two,three}.com
    # 参见
    curl http://www.zhangblog.com/2019/06/16/hexo{04,05,06}/ -I  # 查看信息
    

    或者可以使用[]得到字母数字序列的序列,如:

    ftp://ftp.numericals.com/file[1-100].txt
    ftp://ftp.numericals.com/file[001-100].txt   # 前导用零
    ftp://ftp.letters.com/file[a-z].txt 
    # 参见
    curl http://www.zhangblog.com/2019/06/16/hexo[04-06]/ -I     # 查看信息
    

    不支持嵌套序列,但可以使用几个相邻的序列:

    http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html 
    

    你可以指定一个步长计数器的范围,以获得每第n个数字或字母:

    http://www.numericals.com/file[1-100:10].txt 
    http://www.letters.com/file[a-z:2].txt 
    

    如果指定URL而没有protocol:// prefix,默认为HTTP。
     

    常用选项一

    curl通常在操作过程中显示一个进度表,显示传输的数据量、传输速度和估计的剩余时间等。

    -#, --progress-bar

    curl进度显示为一个简单的进度条;而不是标准的、具有更多信息的进度表。

    [root@iZ28xbsfvc4Z 20190702]# curl -O http://www.zhangblog.com/2019/06/16/hexo04/index.html  # 默认的进度表
      %  Total    %  Received  % Xferd  Average  Speed   Time    Time     Time  Current
                                        Dload   Upload   Total   Spent    Left  Speed
    100  97299  100  97299     0     0   186k       0 --:--:-- --:--:-- --:--:--  186k
    [root@iZ28xbsfvc4Z 20190702]# 
    [root@iZ28xbsfvc4Z 20190702]# curl -# -O http://www.zhangblog.com/2019/06/16/hexo04/index.html  #简单的进度条
    ######################################################################## 100.0%
    

    -0, --http1.0

    (HTTP)强制curl使用HTTP 1.0发出请求,而不是使用其内部首选的HTTP 1.1。

    -1, --tlsv1

    (SSL)强制curl使用TLS 1.x 版本,当与远程TLS服务进行协商时。
    可以使用选项 --tlsv1.0、 --tlsv1.1和 --tlsv1.2来更精确地控制TLS版本(如果使用的SSL后端支持这种级别的控制)。

    -2, --sslv2

    (SSL)强制curl使用TLS 2 版本,当与远程TLS服务进行协商时。

    -3, --sslv3

    (SSL)强制curl使用TLS 3 版本,当与远程TLS服务进行协商时。

    -4, --ipv4

    如果curl能够将一个地址解析为多个IP版本(比如它支持ipv4和ipv6),那么这个选项告诉curl只将名称解析为IPv4地址。

    -6, --ipv6

    如果curl能够将一个地址解析为多个IP版本(比如它支持ipv4和ipv6),那么这个选项告诉curl只将名称解析为IPv6地址。

    -a, --append

    (FTP/SFTP)当在上传中使用时,这将告诉curl追加到目标文件而不是覆盖它。如果文件不存在,将创建它。注意,一些SSH服务器(包括OpenSSH)会忽略此标志。

    -A, --user-agent <agent string>

    (HTTP)指定要发送到HTTP服务端的User-Agent字符串。当然也可以使用 -H, --header 选项来设置。
    用于模拟客户端,如:谷歌浏览器、火狐浏览器、IE 浏览器等等。

    如果多次使用此选项,则将使用最后一个选项。

    模仿浏览器访问

    curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/75.0.3770.999" http://www.zhangblog.com/2019/06/24/domainexpire/ 
    

    --basic

    (HTTP)告诉curl使用HTTP基本身份验证。这是默认的。
     

    常用选项二

    -b, --cookie <name=data>

    (HTTP)将数据作为cookie传递给HTTP服务器。它应该是之前从服务端接收到的“Set-Cookie:”行中的数据。数据格式为“NAME1=VALUE1;NAME2 = VALUE2”。

    如果行中没有使用 ‘=’ 符号,则将其视为一个文件名,用于读取先前存储的cookie行,如果它们匹配,则应在此会话中使用。
    要读取cookie文件的文件格式应该是纯HTTP头文件或Netscape/Mozilla cookie文件格式。

    注意:使用 -b, --cookie 指定的文件仅用作输入。文件中不会存储cookies。要存储cookies,可以使用 -c, --cookie-jar 选项,或者您甚至可以使用 -D, --dump-header 将HTTP头保存到文件中。

    -c, --cookie-jar <file name>

    (HTTP)指定希望curl在完成操作后将所有cookie写入哪个文件。
    Curl写之前从指定文件读取的所有cookie,以及从远程服务端接收的所有cookie。
    如果没有已知的cookie,则不会写入任何文件。该文件将使用Netscape cookie文件格式编写。如果你将文件名设置为单个破折号 “-” ,cookie将被标准输出。

    该命令行选项将激活cookie引擎,使curl记录并使用cookies。激活它的另一种方法是使用 -b, --cookie 选项。

    如果不能创建或写入cookie jar,那么整个curl操作就不会失败,甚至不能清楚地报告错误。使用 -v 会得到一个警告,但这是你得到的关于这种可能致命的情况的唯一可见反馈。

    如果多次使用此选项,将使用最后指定的文件名。

    --connect-timeout <seconds>

    连接服务端的超时时间。这只限制了连接阶段,一旦curl连接了此选项就不再使用了。

    也可参见:-m, --max-time 选项。

    # 当前 https://www.zhangXX.com 是国外服务器,访问受限
    [root@iZ28xbsfvc4Z ~]# curl --connect-timeout 10 https://www.zhangXX.com | head
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:--  0:00:10 --:--:--     0
    curl: (28) Connection timed out after 10001 milliseconds
    

    --create-dirs

    当与 -o 选项一起使用时,curl将根据需要创建必要的本地目录层次结构。

    这个选项只创建与 -o 选项相关的dirs,没有其他内容。如果 -o 文件名没有使用dir,或者其中提到的dir已经存在,则不会创建dir。

    示例

    curl -o ./hexo04/index.html --create-dirs http://www.zhangblog.com/2019/06/16/hexo04
    

    -C, --continue-at <offset>

    按给定偏移量继续/恢复以前的文件传输。给定的偏移量是将被跳过的确切字节数,从源文件的开头开始计算,然后再将其传输到目标文件。

    使用 “-C -”「注意有空格和无空格的情况」,告诉curl自动找出在哪里/如何恢复传输。然后,它使用给定的输出/输入文件来解决这个问题。

    # 下载一个 2G 的文件,可以反复测试,查看结果
    curl -C - -o tmp.data http://www.zhangblog.com/uploads/tmp/tmp.data  
    

    -d, --data <data>

    使用该选项,那么默认请求方式为 POST。
    (HTTP)在POST请求中向HTTP服务器发送指定的数据,与浏览器在用户填写HTML表单并按下submit按钮时所做的相同。这将导致curl使用content-type application/x-www-form-urlencoded将数据传递给服务器。也可参见:-F,-form 。

    如果这些命令在同一个命令行使用多次,这些数据片段将使用指定的分隔符 & 合并。
    因此,使用 ‘-d name=daniel -d skill=lousy’ 将生成一个类似 ‘name=daniel&skill=lousy’ 的post块,也可以直接这样合并使用。

    -d, --data 与 --data-ascii 相同。post数据为纯粹的二进制数据时,那么使用 --data-binary 选项。要对表单字段的值进行url编码,可以使用 --data-urlencode。

    如果您以字母@开始数据,那么其余的应该是一个文件名,以便从其中读取数据。或者 - 如果您希望curl从stdin【标准输入】读取数据。文件的内容必须已经是url编码的。还可以指定多个文件。因此,Posting数据名为 “foobar” 的文件将使用 --data @foobar 完成。

    示例

    请求信息:

    [root@iZ28xbsfvc4Z 20190712]# curl -sv --local-port 9000 -d 'user=zhang&pwd=123456' http://www.zhangblog.com/2019/06/24/domainexpire/ | head -n1 
    * About to connect() to www.zhangblog.com port 80 (#0)
    *   Trying 120.27.48.179...
    * Local port: 9000
    * Connected to www.zhangblog.com (120.27.48.179) port 80 (#0)
    > POST /2019/06/24/domainexpire/ HTTP/1.1   # 可见请求方式为POST
    > User-Agent: curl/7.29.0
    > Host: www.zhangblog.com
    > Accept: */*
    > Content-Length: 21
    > Content-Type: application/x-www-form-urlencoded
    > 
    } [data not shown]
    * upload completely sent off: 21 out of 21 bytes
    < HTTP/1.1 405 Not Allowed
    < Server: nginx/1.14.2
    < Date: Fri, 12 Jul 2019 13:34:20 GMT
    < Content-Type: text/html
    < Content-Length: 173
    < Connection: keep-alive
    < 
    { [data not shown]
    * Connection #0 to host www.zhangblog.com left intact
    <html>
    

    抓包信息

    [root@iZ28xbsfvc4Z tcpdump]# tcpdump -i any port 9000 -A -s 0
    

    在这里插入图片描述

    --data-ascii <data>

    参见 -d, --data

    --data-binary <data>

    (HTTP) POST数据完全按照指定的方式,没有任何额外的处理。

    如果您以字母@开始数据,其余的应该是文件名。
    数据是以类似于 --data-ascii 的方式发布的,只不过保留了换行,而且永远不会进行转换【数据不转换】。

    如果多次使用此选项,第一个选项后面的选项将按照 -d, --data 中的描述追加数据。

    --data-urlencode <data>

    (HTTP)这个Post 数据,与另一个 --data 选项类似,除执行url编码以外。

    -D, --dump-header <file>

    将响应协议头写入指定的文件。

    如果多次使用此选项,则将使用最后一个选项。

    当你想要存储HTTP站点发送给你的头文件时,使用此选项非常方便。

    [root@iZ28xbsfvc4Z 20190703]# curl -D baidu_header.info www.baidu.com 
    ………………
    [root@iZ28xbsfvc4Z 20190703]# ll
    total 4
    -rw-r--r-- 1 root root 400 Jul  3 10:11 baidu_header.info  # 生成的头文件
    

    之后第二次curl调用通过 -b, --cookie 选项,可以从头部读取 cookies 。然而 -c, --cookie-jar 选项是存储 cookies 更好的方法。
     

    常用选项三

    --digest

    (HTTP)启用HTTP摘要身份验证。这是一种身份验证方案,可以防止密码以明文通过网络发送。将此选项与普通的 -u, --user 选项组合使用,以设置用户名和密码。
    相关选项请参见 --ntlm, --negotiate 和 --anyauth。

    如果多次使用此选项,则只使用第一个选项。

    -e, --referer <URL>

    (HTTP)将 “Referer Page” 【从哪个页面跳转过来的】信息发送到HTTP服务器。当然也可以使用 -H, --header 标志来设置。

    如果多次使用此选项,则将使用最后一个选项。

    curl -e 'https:www.baidu.com' http://www.zhangblog.com/2019/06/24/domainexpire/
    

    -f, --fail

    (HTTP)在服务器错误上静默失败(完全没有输出)。这主要是为了使脚本等更好地处理失败的尝试。

    在通常情况下,当HTTP服务器无法交付文档时,它会返回一个HTML文档,说明原因(通常还会描述原因)。此标志将阻止curl输出该值并返回错误22。

    [root@iZ28xbsfvc4Z 20190713]# curl http://www.zhangblog.com/201912312
    <html>
    <head><title>404 Not Found</title></head>
    <body bgcolor="white">
    <center><h1>404 Not Found</h1></center>
    <hr><center>nginx/1.14.2</center>
    </body>
    </html>
    [root@iZ28xbsfvc4Z 20190713]# curl -f http://www.zhangblog.com/201912312
    curl: (22) The requested URL returned error: 404 Not Found
    

    -F, --form <name=content>

    (HTTP)这允许curl模拟用户按下submit按钮后填充的表单。

    该情况让curl 可使用Content-Type multipart/form-data POST数据。也可以上传二进制文件等。

    @文件名:使一个文件作为文件上传附加在post中。
    <文件名:从文件中获取该文本字段的内容。

    例如,要将密码文件发送到服务器,其中“password”是表单字段的名称,/etc/passwd将作为输入:

    curl -F password=@/etc/passwd www.mypasswords.com
    

    您还可以使用 ‘type=’ 告诉curl使用什么 Content-Type ,方法类似于:

    curl -F "web=@index.html;type=text/html" url.com
    或
    curl -F "name=daniel;type=text/foo" url.com
    

    可以通过设置 filename= 更改本地上传的文件名,如下:

    curl -F "file=@localfile;filename=nameinpost" url.com
    

    上传的文件名从改为了 nameinpost

    如果文件名/路径包括 ‘,’ 或 ‘;’ ,必须用双引号括起来:

    curl -F "file=@\"localfile\";filename=\"nameinpost\"" url.com
    或
    curl -F 'file=@"localfile";filename="nameinpost"' url.com
    

    最外层可用单引号或双引号。

    这个选项可以多次使用。

    请勿如下使用

    curl -F 'user=zhang&password=pwd' url.com   # 这种用法是错误的
    

    --form-string <name=string>

    (HTTP)类似于 --form,只是命名参数的value字符串按字面意思使用。
    在值中以 ‘@’ 和 ‘<’ 开头的字符,以及 ‘;type=’ 字符串没有特殊的含义。

    如果字符串值有可能意外触发 --form 的 “@” 或 “<” 特性,请优先使用此选项。

    -g, --globoff

    这个选项关闭了“URL全局解析器”。当您设置这个选项时,您可以指定包含字母 {}[] 的url,而不需要curl本身来解释它们。

    注意,这些字母不是正常的合法URL内容,但是它们应该按照URI标准进行编码。

    -G, --get

    使用此选项时,将使所有使用 -d, --data 或 --data-binary 指定的数据在HTTP GET请求中使用,而不是在POST请求中使用。
    数据将被追加到URL的一个 ‘?’ 的分隔符后。

    如果与 -I 结合使用,POST数据将被替换追加到带有HEAD请求的URL中。

    如果多次使用此选项,则只使用第一个选项。

    示例

    [root@iZ28xbsfvc4Z 20190712]# curl -sv -G --local-port 9000 -d 'user=zhang&pwd=123456' http://www.zhangblog.com/2019/06/24/domainexpire/ | head -n1 
    或则
    [root@iZ28xbsfvc4Z 20190713]# curl -sv --local-port 9000 "http://www.zhangblog.com/2019/06/24/domainexpire/?user=zhang&pwd=123456" | head -n1
    * About to connect() to www.zhangblog.com port 80 (#0)
    *   Trying 120.27.48.179...
    * Local port: 9000
    * Connected to www.zhangblog.com (120.27.48.179) port 80 (#0)
    > GET /2019/06/24/domainexpire/?user=zhang&pwd=123456 HTTP/1.1  # 可见请求方式为 GET,且参数追加到了URI后
    > User-Agent: curl/7.29.0
    > Host: www.zhangblog.com
    > Accept: */*
    > 
    < HTTP/1.1 200 OK
    < Server: nginx/1.14.2
    < Date: Fri, 12 Jul 2019 14:04:19 GMT
    < Content-Type: text/html
    < Content-Length: 51385
    < Last-Modified: Tue, 09 Jul 2019 13:55:19 GMT
    < Connection: keep-alive
    < ETag: "5d249cc7-c8b9"
    < Accept-Ranges: bytes
    < 
    { [data not shown]
    * Connection #0 to host www.zhangblog.com left intact
    <!DOCTYPE html>
    

    抓包信息

    [root@iZ28xbsfvc4Z tcpdump]# tcpdump -i any port 9000 -A -s 0
    

    在这里插入图片描述

    -H, --header <header>

    (HTTP) 要发送到服务端的自定义请求头。

    此选项可多次用于添加/替换/删除多个headers。

    curl -H 'Connection: keep-alive' -H 'Referer: https://sina.com.cn' -H 'User-Agent: Mozilla/1.0' http://www.zhangblog.com/2019/06/24/domainexpire/
    

    --ignore-content-length

    (HTTP)忽略Content-Length 头信息。

    -i, --include

    (HTTP)在输出的内容中包含HTTP 头信息。

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

    -I, --head

    (HTTP/FTP/FILE)只获取HTTP头文件。
    在FTP或FILE 文件上使用时,curl只显示文件大小和最后修改时间。

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

    -k, --insecure

    (SSL)允许curl执行不安全的SSL连接和传输。
    所有SSL连接都尝试使用默认安装的CA证书包来确保安全。

    示例

    [root@iZ28xbsfvc4Z ~]# curl https://140.205.16.113/  # 被拒绝
    curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
    [root@iZ28xbsfvc4Z ~]# 
    [root@iZ28xbsfvc4Z ~]# curl -k https://140.205.16.113/  # 允许执行不安全的证书连接
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html>
    <head><title>403 Forbidden</title></head>
    <body bgcolor="white">
    <h1>403 Forbidden</h1>
    <p>You don't have permission to access the URL on this server.<hr/>Powered by Tengine</body>
    </html>
    

    常用选项四

    --keepalive-time <seconds>

    keepalive 时长。如果使用no-keepalive,则此选项无效。

    如果多次使用此选项,则将使用最后一个选项。如果未指定,该选项默认为60秒。

    --key <key>

    (SSL/SSH)私钥文件名。允许你在这个单独的文件中提供你的私钥。

    对于SSH,如果没有指定,curl尝试如下顺序:’~/.ssh/id_rsa’,’~/.ssh/id_dsa’,’./id_rsa’,’./id_dsa’。

    如果多次使用此选项,则将使用最后一个选项。

    --key-type <type>

    (SSL)私钥文件类型。指定 --key 提供的私钥的类型。支持DER、PEM和ENG。如果没有指定,则定为PEM。

    如果多次使用此选项,则将使用最后一个选项。

    -L, --location

    (HTTP/HTTPS) 跟踪重定向
    如果服务器报告请求页面已移动到另一个位置(用location: header和3XX响应代码表示),此选项将使curl在新位置上重做请求。

    如果与 -i, --include 或 -I, --head 一起使用,将显示所有请求页面的标题。

    [root@iZ28xbsfvc4Z ~]# curl -I -L https://baidu.com/ 
    HTTP/1.1 302 Moved Temporarily  # 302 重定向
    Server: bfe/1.0.8.18
    Date: Thu, 04 Jul 2019 03:07:15 GMT
    Content-Type: text/html
    Content-Length: 161
    Connection: keep-alive
    Location: http://www.baidu.com/
    
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    Connection: Keep-Alive
    Content-Length: 277
    Content-Type: text/html
    Date: Thu, 04 Jul 2019 03:07:15 GMT
    Etag: "575e1f60-115"
    Last-Modified: Mon, 13 Jun 2016 02:50:08 GMT
    Pragma: no-cache
    Server: bfe/1.0.8.18
    

    --limit-rate <speed>

    指定要使用curl的最大传输速率。

    如果有一个有限的管道,并且希望传输不要使用您的全部带宽,那么这个特性是非常有用的。

    curl --limit-rate 500 http://www.baidu.com/
    curl --limit-rate 2k http://www.baidu.com/
    

    单位:默认字节,除非添加后缀。附加 “k” 或 “K” 表示千字节, “m” 或 “M” 表示兆字节,而 “g” 或 “G” 表示千兆字节。例如:200K, 3m和1G。

    给定的速率是整个传输过程中计算的平均速度。这意味着curl可能在短时间内使用更高的传输速度,但是随着时间的推移,它只使用给定的速率。

    如果多次使用此选项,则将使用最后一个选项。

    --local-port <num>[-num]

    指定本地的一个端口或端口范围去连接。

    请注意,端口号本质上是一种稀缺资源,有时会很忙,因此将此范围设置为太窄可能会导致不必要的连接失败。

    curl --local-port 9000 http://www.baidu.com/
    curl --local-port 9000-9999 http://www.baidu.com/ 
    

    -m, --max-time <seconds>

    允许整个操作花费的最大时间(以秒为单位)。

    这对于防止由于网络或链接变慢而导致批处理作业挂起数小时非常有用。

    也可参见:--connect-timeout 选项

    [root@iZ28xbsfvc4Z ~]# curl -m 10 --limit-rate 5 http://www.baidu.com/ | head  # 超过10秒后,断开连接
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      2  2381    2    50    0     0      4      0  0:09:55  0:00:10  0:09:45     4
    curl: (28) Operation timed out after 10103 milliseconds with 50 out of 2381 bytes received
    <!DOCTYPE html>
    <!--STATUS OK--><html> <head><met
    ### 或
    [root@iZ28xbsfvc4Z ~]# curl -m 10 https://www.zhangXX.com | head   # 超过10秒后,断开连接
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:--  0:00:10 --:--:--     0
    curl: (28) Connection timed out after 10001 milliseconds
    

    --max-filesize <bytes>

    指定要下载的文件的最大大小(以字节为单位)。
    如果请求的文件大于这个值,那么传输将不会启动,curl将返回退出代码63。

    示例

    [root@iZ28xbsfvc4Z ~]# curl -I http://www.zhangblog.com/uploads/hexo/00.jpg # 正常
    HTTP/1.1 200 OK
    Server: nginx/1.14.2
    Date: Thu, 04 Jul 2019 07:24:24 GMT
    Content-Type: image/jpeg
    Content-Length: 18196
    Last-Modified: Mon, 24 Jun 2019 01:43:02 GMT
    Connection: keep-alive
    ETag: "5d102aa6-4714"
    Accept-Ranges: bytes
    
    [root@iZ28xbsfvc4Z ~]# echo $?
    0
    [root@iZ28xbsfvc4Z ~]# 
    [root@iZ28xbsfvc4Z ~]# 
    [root@iZ28xbsfvc4Z ~]# curl --max-filesize 1000 -I http://www.zhangblog.com/uploads/hexo/00.jpg # 受限异常
    HTTP/1.1 200 OK
    Server: nginx/1.14.2
    Date: Thu, 04 Jul 2019 07:24:54 GMT
    Content-Type: image/jpeg
    curl: (63) Maximum file size exceeded
    [root@iZ28xbsfvc4Z ~]# 
    [root@iZ28xbsfvc4Z ~]# echo $?
    63
    

    --max-redirs <num>

    设置允许的最大重定向跟踪数。

    如果也使用了 -L, --location,则此选项可用于防止curl在悖论中无限重定向。
    默认情况下,限制为50重定向。将此选项设置为-1,使其无限。

    --no-keepalive

    禁用在TCP连接上使用keepalive消息,因为默认情况下curl启用了它们。

    注意,这是文档中已否定的选项名。因此,您可以使用 --keepalive 来强制keepalive。
     

    常用选项五

    -o, --output <file>

    输出到一个文件,而不是标准输出。

    如果使用 {} 或 [] 来获取多个documents。可以使用 ‘#’ 后跟说明符中的一个数字。该变量将替换为正在获取URL的当前字符串。就像:

    curl http://{one,two}.site.com -o "file_#1.txt"
    curl http://{site,host}.host[1-5].com -o "#1_#2"
    

    示例1

    [root@iZ28xbsfvc4Z 20190703]# curl "http://www.zhangblog.com/2019/06/16/hexo{04,05,06}/" -o "file_#1.info"   # 注意curl 的地址需要用引号括起来
    或
    [root@iZ28xbsfvc4Z 20190703]# curl "http://www.zhangblog.com/2019/06/16/hexo[04-06]/" -o "file_#1.info"   # 注意curl 的地址需要用引号括起来
    [1/3]: http://www.zhangblog.com/2019/06/16/hexo04/ --> file_04.info
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100 97299  100 97299    0     0  1551k      0 --:--:-- --:--:-- --:--:-- 1557k
    
    [2/3]: http://www.zhangblog.com/2019/06/16/hexo05/ --> file_05.info
    100 54409  100 54409    0     0   172M      0 --:--:-- --:--:-- --:--:--  172M
    
    [3/3]: http://www.zhangblog.com/2019/06/16/hexo06/ --> file_06.info
    100 56608  100 56608    0     0   230M      0 --:--:-- --:--:-- --:--:--  230M
    [root@iZ28xbsfvc4Z 20190703]# 
    [root@iZ28xbsfvc4Z 20190703]# ll
    total 212
    -rw-r--r-- 1 root root 97299 Jul  4 16:51 file_04.info
    -rw-r--r-- 1 root root 54409 Jul  4 16:51 file_05.info
    -rw-r--r-- 1 root root 56608 Jul  4 16:51 file_06.info
    

    示例2

    [root@iZ28xbsfvc4Z 20190703]# curl "http://www.{baidu,douban}.com" -o "site_#1.txt"  # 注意curl 的地址需要用引号括起来
    [1/2]: http://www.baidu.com --> site_baidu.txt
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  2381  100  2381    0     0  46045      0 --:--:-- --:--:-- --:--:-- 46686
    
    [2/2]: http://www.douban.com --> site_douban.txt
    100   162  100   162    0     0   3173      0 --:--:-- --:--:-- --:--:--  3173
    [root@iZ28xbsfvc4Z 20190703]# 
    [root@iZ28xbsfvc4Z 20190703]# ll
    total 220
    -rw-r--r-- 1 root root  2381 Jul  4 16:53 site_baidu.txt
    -rw-r--r-- 1 root root   162 Jul  4 16:53 site_douban.txt
    

    -O, --remote-name

    写入到本地文件,名称与远程文件的名称相同。(只使用远程文件的文件部分,路径被切断。)

    用于保存的远程文件名是从给定的URL中提取的,没有其他内容。
    因此,文件将保存在当前工作目录中。如果希望将文件保存在另一个目录中,请确保在curl调用 -O, --remote-name之前更改当前工作目录!

    [root@iZ28xbsfvc4Z 20190712]# curl -O https://www.baidu.com   # 使用了 -O 选项,必须指定到具体的文件  错误使用
    curl: Remote file name has no length!
    curl: try 'curl --help' or 'curl --manual' for more information
    [root@iZ28xbsfvc4Z 20190712]# curl -O https://www.baidu.com/index.html   # 使用了 -O 选项,必须指定到具体的文件  正确使用
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  2443  100  2443    0     0  13289      0 --:--:-- --:--:-- --:--:-- 13349
    

    --pass <phrase>

    (SSL/SSH)私钥密码

    如果多次使用此选项,则将使用最后一个选项。

    --post301

    告诉curl当301重定向时,不要将POST请求转换为GET请求。

    非rfc行为在web浏览器中无处不在,因此curl在缺省情况下进行转换以保持一致性。但是,服务器可能需要在重定向之后将POST保留为POST。

    这个选项只有在使用 -L, --location 时才有意义

    --post302

    告诉curl当302重定向时,不要将POST请求转换为GET请求。

    非rfc行为在web浏览器中无处不在,因此curl在缺省情况下进行转换以保持一致性。但是,服务器可能需要在重定向之后将POST保留为POST。

    这个选项只有在使用 -L, --location 时才有意义

    --post303

    告诉curl当303重定向时,不要将POST请求转换为GET请求。

    非rfc行为在web浏览器中无处不在,因此curl在缺省情况下进行转换以保持一致性。但是,服务器可能需要在重定向之后将POST保留为POST。

    这个选项只有在使用 -L, --location 时才有意义

    说明:
    上述三个选项都是为了防止在重定向过程中,原来的 POST 请求,变为 GET请求。为了防止该情况,有两种处理方式。
    1、使用上述选项可避免;
    2、使用 -X POST 选项和命令。

    示例

    [root@iZ28xbsfvc4Z ~]# curl -Lsv -d 'user=zhang' https://baidu.com | head -n1
    

    开始是POST请求,302 重定向后变为了 GET请求。
    在这里插入图片描述

    [root@iZ28xbsfvc4Z ~]# curl -Lsv -d 'user=zhang' --post301 --post302 --post303 https://baidu.com | head -n1 
    

    前后都是 POST 请求。但是选项较多。
    在这里插入图片描述

    [root@iZ28xbsfvc4Z ~]# curl -Lsv -d 'user=zhang' -X POST https://baidu.com | head -n1 
    

    前后都是 POST 请求。推荐使用此命令。
    在这里插入图片描述

    --pubkey <key>

    (SSH)公钥文件名。允许在这个单独的文件中提供公钥。

    如果多次使用此选项,则将使用最后一个选项。

    -r, --range <range>

    (HTTP/FTP/SFTP/FILE)从HTTP/1.1、FTP或SFTP服务器或本地文件检索字节范围。范围可以通过多种方式指定。用于分段下载。

    有时文件比较大,或者难以迅速传输,而利用分段传输,可以实现稳定、高效并且有保障的传输,更具有实用性,同时容易对差错文件进行更正。

    0-499:指定前500个字节
    500-999:指定第二个500字节
    -500:指定最后500个字节
    9500-:指定9500字节及之后的字节
    0-0,-1:指定第一个和最后一个字节
    500-700,600-799:从偏移量500开始指定300字节
    100-199,500-599:指定两个单独100字节的范围

    分段下载

    [root@iZ28xbsfvc4Z 20190715]# curl -I http://www.zhangblog.com/uploads/hexo/00.jpg   # 查看文件大小
    HTTP/1.1 200 OK
    Server: nginx/1.14.2
    Date: Mon, 15 Jul 2019 03:23:44 GMT
    Content-Type: image/jpeg
    Content-Length: 18196   # 文件大小
    Last-Modified: Fri, 05 Jul 2019 08:04:58 GMT
    Connection: keep-alive
    ETag: "5d1f04aa-4714"
    Accept-Ranges: bytes
    [root@iZ28xbsfvc4Z 20190715]# curl -r 0-499   -o 00-jpg.part1 http://www.zhangblog.com/uploads/hexo/00.jpg
    [root@iZ28xbsfvc4Z 20190715]# curl -r 500-999 -o 00-jpg.part2 http://www.zhangblog.com/uploads/hexo/00.jpg
    [root@iZ28xbsfvc4Z 20190715]# curl -r 1000-   -o 00-jpg.part3 http://www.zhangblog.com/uploads/hexo/00.jpg
    

    查看下载文件

    [root@iZ28xbsfvc4Z 20190715]# ll
    total 36
    -rw-r--r-- 1 root root   500 Jul 15 11:25 00-jpg.part1
    -rw-r--r-- 1 root root   500 Jul 15 11:25 00-jpg.part2
    -rw-r--r-- 1 root root 17196 Jul 15 11:26 00-jpg.part3
    

    文件合并

    [root@iZ28xbsfvc4Z 20190715]# cat 00-jpg.part1 00-jpg.part2 00-jpg.part3 > 00.jpg
    [root@iZ28xbsfvc4Z 20190715]# ll
    total 56
    -rw-r--r-- 1 root root 18196 Jul 15 11:29 00.jpg
    

    -R, --remote-time

    使curl尝试获取远程文件的时间戳,如果可用,则使本地文件获得相同的时间戳【针对修改时间戳Modify】。

    curl -o nfs1.info -R http://www.zhangblog.com/2019/07/05/nfs1/
    

    --retry <num>

    传输出现问题时,重试的次数。数字设置为0将使curl不重试(这是缺省值)。

    出现的瞬时错误如:timeout、FTP 4xx响应状代码或HTTP 5xx响应状代码。

    curl准备重试传输时,它将首先等待一秒钟,之后对于所有即将到来的重试,它将把等待时间延长一倍,直到达到10分钟,这将是其余重试之间的延迟。

    --retry-delay <seconds>

    传输出现问题时,设置重试间隔时间。将此延迟设置为零将使curl使用默认的延迟时间。

    --retry-max-time <seconds>

    传输出现问题时,设置最大重试时间。将此选项设置为0则不超时重试。
     

    常用选项六

    -s, --silent

    静默或静音模式。不显示进度表/条或错误消息。

    示例

    [root@iZ28xbsfvc4Z 20190713]# curl https://www.baidu.com | head -n1  # 默认有进度表
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  2443  100  2443    0     0  13346      0 --:--:-- --:--:-- --:--:-- 13349
    <!DOCTYPE html>
    [root@iZ28xbsfvc4Z 20190713]# curl -s https://www.baidu.com | head -n1
    <!DOCTYPE html>
    

    -S, --show-error

    当与 -s 一起使用时,如果curl失败,curl将显示一条错误消息。

    [root@iZ28xbsfvc4Z 20190713]# curl -s https://140.205.16.113/ 
    [root@iZ28xbsfvc4Z 20190713]# 
    [root@iZ28xbsfvc4Z 20190713]# curl -sS https://140.205.16.113/ 
    curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
    

    --stderr <file>

    将错误信息重定向到一个文件。如果文件名是普通的 ‘-’,则将其写入stdout。

    如果多次使用此选项,则将使用最后一个选项。

    [root@iZ28xbsfvc4Z 20190713]# curl --stderr err.info https://140.205.16.113/ 
    [root@iZ28xbsfvc4Z 20190713]# ll
    total 92
    -rw-r--r-- 1 root root   116 Jul 13 10:19 err.info
    [root@iZ28xbsfvc4Z 20190713]# cat err.info 
    curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
    

    -T, --upload-file <file>

    这将指定的本地文件传输到远程URL。如果指定的URL中没有文件部分,Curl将附加本地文件名。

    注意:必须在最后一个目录上使用尾随 / 来真正证明Curl没有文件名,否则Curl会认为您的最后一个目录名是要使用的远程文件名。这很可能导致上传操作失败。
    如果在HTTP(S)服务器上使用此命令,则将使用PUT命令。

    同时也支持多个文件上传,如下:

    curl -T "{file1,file2}" http://www.uploadtothissite.com
    或则
    curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
    

    --trace <file>

    对指定文件进行debug。包括所有传入和传出数据。

    此选项会覆盖之前使用的 -v、 --verbose或 --trace-ascii。

    如果多次使用此选项,则将使用最后一个选项。

    curl --trace trace.info https://www.baidu.com
    

    --trace-ascii <file>

    对指定文件进行debug。包括所有传入和传出数据。

    这非常类似于 --trace,但是省略了十六进制部分,只显示转储的ASCII部分。使它输出更小,对于我们来说可能更容易阅读。

    此选项会覆盖之前使用的 -v、 --verbose或 --trace。

    如果多次使用此选项,则将使用最后一个选项。

    curl --trace-ascii trace2.info https://www.baidu.com
    

    --trace-time

    curl显示的每个跟踪或冗长的行添加时间戳。

    curl --trace-ascii trace3.info --trace-time https://www.baidu.com
    

    -v, --verbose

    显示详细操作信息。主要用于调试。

    以 > 开头的行表示curl发送的"header data";< 表示curl接收到的通常情况下隐藏的"header data";而以 * 开头的行表示curl提供的附加信息。

    [root@iZ28xbsfvc4Z 20190712]# curl -v https://www.baidu.com
    * About to connect() to www.baidu.com port 443 (#0)
    *   Trying 180.101.49.12...
    * Connected to www.baidu.com (180.101.49.12) port 443 (#0)
    * Initializing NSS with certpath: sql:/etc/pki/nssdb
    *   CAfile: /etc/pki/tls/certs/ca-bundle.crt
      CApath: none
    * SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    * Server certificate:
    * 	subject: CN=baidu.com,O="Beijing Baidu Netcom Science Technology Co., Ltd",OU=service operation department,L=beijing,ST=beijing,C=CN
    * 	start date: May 09 01:22:02 2019 GMT
    * 	expire date: Jun 25 05:31:02 2020 GMT
    * 	common name: baidu.com
    * 	issuer: CN=GlobalSign Organization Validation CA - SHA256 - G2,O=GlobalSign nv-sa,C=BE
    > GET / HTTP/1.1
    > User-Agent: curl/7.29.0
    > Host: www.baidu.com
    > Accept: */*
    > 
    < HTTP/1.1 200 OK
    < Accept-Ranges: bytes
    < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    < Connection: Keep-Alive
    < Content-Length: 2443
    < Content-Type: text/html
    < Date: Fri, 12 Jul 2019 08:26:23 GMT
    < Etag: "588603eb-98b"
    < Last-Modified: Mon, 23 Jan 2017 13:23:55 GMT
    < Pragma: no-cache
    < Server: bfe/1.0.8.18
    < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
    < 
    <!DOCTYPE html>
    ………………  # curl 网页的具体信息
    

    -w, --write-out <format>

    在完成和成功操作后要在stdout上显示什么。

    支持如下变量,具体含义请自行参见curl文档。

    content_type
    filename_effective
    ftp_entry_path
    http_code
    http_connect
    local_ip
    local_port
    num_connects
    num_redirects
    redirect_url
    remote_ip
    remote_port
    size_download
    size_header
    size_request
    size_upload
    speed_download
    speed_upload
    ssl_verify_result
    time_appconnect
    time_connect
    time_namelookup
    time_pretransfer
    time_redirect
    time_starttransfer
    time_total
    url_effective
    

    示例

    [root@iZ28xbsfvc4Z 20190713]# curl -o /dev/null -s -w %{content_type} www.baidu.com  # 输出结果没有换行
    text/html[root@iZ28xbsfvc4Z 20190713]# 
    [root@iZ28xbsfvc4Z 20190713]# curl -o /dev/null -s -w %{http_code} www.baidu.com  # 输出结果没有换行
    200[root@iZ28xbsfvc4Z 20190713]# 
    [root@iZ28xbsfvc4Z 20190713]# curl -o /dev/null -s -w %{local_port} www.baidu.com  # 输出结果没有换行
    37346[root@iZ28xbsfvc4Z 20190713]# 
    [root@iZ28xbsfvc4Z 20190713]# 
    

    -x, --proxy <[protocol://][user:password@]proxyhost[:port]>

    使用指定的HTTP代理。如果没有指定端口号,则假定它位于端口1080。

    -X, --request <command>

    (HTTP)指定与HTTP服务器通信时的请求方式。默认GET

    curl -vs -X POST https://www.baidu.com | head -n1
    

    在这里插入图片描述

    curl -vs -X PUT https://www.baidu.com | head -n1
    

    在这里插入图片描述

    展开全文
  • curl.exe下载

    热门讨论 2015-05-20 15:33:21
    curl.exe下载 curl详解可参考我的博客
  • C++ CURL使用

    千次阅读 2021-01-29 09:32:39
    httpclientdemo.cpp // httpclientdemo.cpp : 定义控制台应用程序的入口点。...#include "include/curl/curl.h" #include "hmac.h" #include "sha1.h" #include "json.h" #include <cstdio> #include .

    一、简介

    之前记录下在Windows下编译libcurl库的过程,今天再来写下CURL库的使用。想自己编译或者直接下载CURL库的,可以看我的另一篇博客,32位和64位的CURL库都有:

    https://blog.csdn.net/Sakuya__/article/details/113246127

     


    二、基本函数

    1. CURLcode curl_global_init(long flags);

    描述:
    初始化libcurl,这个函数全局使用一次。(在调用curl_global_cleanup 函数后仍然可再用) 
    如果这个函数在curl_easy_init函数调用时还没调用,它将由libcurl库自动调用, 所以多线程下最好主动调用该函数以防止在线程中curl_easy_init时多次调用。
    
    注意:虽然libcurl是线程安全的,但curl_global_init是不能保证线程安全的,所以不要在每个线程中都调用curl_global_init,应该将该函数的调用放在主线程中。
    
    参数:flags 
    CURL_GLOBAL_ALL                      //初始化所有的可能的调用。 
    CURL_GLOBAL_SSL                      //初始化支持 安全套接字层。 
    CURL_GLOBAL_WIN32                    //初始化win32套接字库。 
    CURL_GLOBAL_NOTHING                  //没有额外的初始化。

     2. void curl_global_cleanup(void); 

    描述:
    在结束libcurl使用的时候,释放内存,用来对curl_global_init做的工作清理。
    
    注意:虽然libcurl是线程安全的,但curl_global_cleanup是不能保证线程安全的,所以不要在每个线程中都调用curl_global_init,应该将该函数的调用放在主线程中。

    3. char *curl_version( ); 

    描述: 
    打印当前libcurl库的版本。

    4. CURL *curl_easy_init( ); 

    描述: 
    curl_easy_init用来初始化一个CURL的指针(有些像返回FILE类型的指针一样). 相应的在调用结束时要用curl_easy_cleanup函数清理. 
    一般curl_easy_init意味着一个会话的开始. 它会返回一个easy_handle(CURL*对象), 一般都用在easy系列的函数中.

    5. void curl_easy_cleanup(CURL *handle);

    描述: 
    这个调用用来结束一个会话.与curl_easy_init配合着用.  

    6. CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter); 

    描述:
    这个是一个很重要的函数,使用它设置的传输选项,实现回调函数以完成用户特定任务.几乎所有的curl程序都要频繁的使用它.它告诉curl库.程序将有如何的行为. 比如要查看一个网页的html代码等.(这个函数有些像ioctl函数)
    
    参数: 
    1.  CURLOPT_URL  
        设置访问URL
    
    2.  CURLOPT_WRITEFUNCTION,CURLOPT_WRITEDATA 
        回调函数原型为: size_t function( void *ptr, size_t size, size_t nmemb, void *stream); 函数将在libcurl接收到数据后被调用,因此函数多做数据保存的功能,如处理下载文件。CURLOPT_WRITEDATA 用于表明CURLOPT_WRITEFUNCTION函数中的stream指针的来源。
    如果你没有通过CURLOPT_WRITEFUNCTION属性给easy handle设置回调函数,libcurl会提供一个默认的回调函数,它只是简单的将接收到的数据打印到标准输出。你也可以通过 CURLOPT_WRITEDATA属性给默认回调函数传递一个已经打开的文件指针,用于将数据输出到文件里。
    
    3.  CURLOPT_HEADERFUNCTION,CURLOPT_HEADERDATA 
        回调函数原型为 size_t function( void *ptr, size_t size,size_t nmemb, void *stream); libcurl一旦接收到http 头部数据后将调用该函数。CURLOPT_WRITEDATA 传递指针给libcurl,该指针表明CURLOPT_HEADERFUNCTION 函数的stream指针的来源。
    
    4.  CURLOPT_READFUNCTION CURLOPT_READDATA 
        libCurl需要读取数据传递给远程主机时将调用CURLOPT_READFUNCTION指定的函数,函数原型是:size_t function(void *ptr, size_t size, size_t nmemb,void *stream). CURLOPT_READDATA 表明CURLOPT_READFUNCTION函数原型中的stream指针来源。
    
    5.  CURLOPT_NOPROGRESS,CURLOPT_PROGRESSFUNCTION,CURLOPT_PROGRESSDATA 
        跟数据传输进度相关的参数。CURLOPT_PROGRESSFUNCTION 指定的函数正常情况下每秒被libcurl调用一次,为了使CURLOPT_PROGRESSFUNCTION被调用,CURLOPT_NOPROGRESS必须被设置为false,CURLOPT_PROGRESSDATA指定的参数将作为CURLOPT_PROGRESSFUNCTION指定函数的第一个参数
    
    6.  CURLOPT_TIMEOUT,CURLOPT_CONNECTIONTIMEOUT: 
        CURLOPT_TIMEOUT 由于设置传输时间,CURLOPT_CONNECTIONTIMEOUT 设置连接等待时间
    
    7.  CURLOPT_FOLLOWLOCATION 
        设置重定位URL
    
    8.  CURLOPT_RANGE: CURLOPT_RESUME_FROM: 
        断点续传相关设置。CURLOPT_RANGE 指定char *参数传递给libcurl,用于指明http域的RANGE头域,例如: 
        表示头500个字节:bytes=0-499 
        表示第二个500字节:bytes=500-999 
        表示最后500个字节:bytes=-500 
        表示500字节以后的范围:bytes=500- 
        第一个和最后一个字节:bytes=0-0,-1 
        同时指定几个范围:bytes=500-600,601-999 
        CURLOPT_RESUME_FROM 传递一个long参数给libcurl,指定你希望开始传递的 偏移量。
    

    7. CURLcode curl_easy_perform(CURL *handle);

    描述:
    这个函数在初始化CURL类型的指针 以及curl_easy_setopt完成后调用,用来完成传输任务. 就像字面的意思所说perform就像是个舞台.让我们设置的 option 运作起来.
    
    返回值:
    返回0意味一切ok,非0代表错误发生。主要错误码说明: 
    1.  CURLE_OK  
        任务完成一切都好 
    2   CURLE_UNSUPPORTED_PROTOCOL 
        不支持的协议,由URL的头部指定 
    3   CURLE_COULDNT_CONNECT 
        不能连接到remote 主机或者代理 
    4   CURLE_REMOTE_ACCESS_DENIED 
        访问被拒绝 
    5   CURLE_HTTP_RETURNED_ERROR 
        Http返回错误 
    6   CURLE_READ_ERROR 
        读本地文件错误

     


    三、代码示例

    1.基本的http GET/POST操作

    #include <stdio.h>
    #include <curl/curl.h>
    bool getUrl(char *filename)
    {
        CURL *curl;
        CURLcode res;
        FILE *fp;
        if ((fp = fopen(filename, "w")) == NULL)  // 返回结果用文件存储
            return false;
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Accept: Agent-007");
        curl = curl_easy_init();    // 初始化
        if (curl)
        {
            //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");// 代理
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头
            curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //将返回的http头输出到fp指向的文件
            curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //将返回的html主体数据输出到fp指向的文件
            res = curl_easy_perform(curl);   // 执行
            if (res != 0) {
    
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            fclose(fp);
            return true;
        }
    }
    bool postUrl(char *filename)
    {
        CURL *curl;
        CURLcode res;
        FILE *fp;
        if ((fp = fopen(filename, "w")) == NULL)
            return false;
        curl = curl_easy_init();
        if (curl)
        {
            curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "&logintype=uid&u=xieyan&psw=xxx86");    // 指定post内容
            //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");
            curl_easy_setopt(curl, CURLOPT_URL, " http://mail.sina.com.cn/cgi-bin/login.cgi ");   // 指定url
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
            res = curl_easy_perform(curl);
            curl_easy_cleanup(curl);
        }
        fclose(fp);
        return true;
    }
    int main(void)
    {
        getUrl("/tmp/get.html");
        postUrl("/tmp/post.html");
    }

    2.  获取html网页

    #include <stdio.h>
    #include <curl/curl.h>
    #include <stdlib.h>
    int main(int argc, char *argv[])
    {
        CURL *curl;             //定义CURL类型的指针
    CURLcode res;           //定义CURLcode类型的变量,保存返回状态码
        if(argc!=2)
        {
            printf("Usage : file <url>;\n");
            exit(1);
        }
     
        curl = curl_easy_init();        //初始化一个CURL类型的指针
        if(curl!=NULL)
        {
            //设置curl选项. 其中CURLOPT_URL是让用户指 定url. argv[1]中存放的命令行传进来的网址
            curl_easy_setopt(curl, CURLOPT_URL, argv[1]);        
            //调用curl_easy_perform 执行我们的设置.并进行相关的操作. 在这 里只在屏幕上显示出来.
            res = curl_easy_perform(curl);
            //清除curl操作.
            curl_easy_cleanup(curl);
        }
        return 0;
    }

    3.  网页下载保存实例 

    // 采用CURLOPT_WRITEFUNCTION 实现网页下载保存功能
    #include <stdio.h>;
    #include <stdlib.h>;
    #include <unistd.h>;
     
    #include <curl/curl.h>;
    #include <curl/types.h>;
    #include <curl/easy.h>;
     
    FILE *fp;  //定义FILE类型指针
    //这个函数是为了符合CURLOPT_WRITEFUNCTION而构造的
    //完成数据保存功能
    size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)  
    {
        int written = fwrite(ptr, size, nmemb, (FILE *)fp);
        return written;
    }
     
    int main(int argc, char *argv[])
    {
        CURL *curl;
     
        curl_global_init(CURL_GLOBAL_ALL);  
        curl=curl_easy_init();
        curl_easy_setopt(curl, CURLOPT_URL, argv[1]);  
     
        if((fp=fopen(argv[2],"w"))==NULL)
        {
            curl_easy_cleanup(curl);
            exit(1);
        }
    CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);  
        curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        exit(0);
    }

    4进度条实例显示文件下载进度 

    // 采用CURLOPT_NOPROGRESS, CURLOPT_PROGRESSFUNCTION    CURLOPT_PROGRESSDATA 实现文件传输进度提示功能
    //函数采用了gtk库,故编译时需指定gtk库
    //函数启动专门的线程用于显示gtk 进度条bar
    #include <stdio.h>
    #include <gtk/gtk.h>
    #include <curl/curl.h>
    #include <curl/types.h> /* new for v7 */
    #include <curl/easy.h> /* new for v7 */
     
    GtkWidget *Bar;
    这个函数是为了符合CURLOPT_WRITEFUNCTION而构造的
    //完成数据保存功能
    size_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
    {
      return fwrite(ptr, size, nmemb, stream);
    }
    //这个函数是为了符合CURLOPT_READFUNCTION而构造的
    //数据上传时使用
    size_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream)
    {
      return fread(ptr, size, nmemb, stream);
    }
    //这个函数是为了符合CURLOPT_PROGRESSFUNCTION而构造的
    //显示文件传输进度,t代表文件大小,d代表传 输已经完成部分
    int my_progress_func(GtkWidget *bar,
                         double t, /* dltotal */
                         double d, /* dlnow */
                         double ultotal,
                         double ulnow)
    {
    /*  printf("%d / %d (%g %%)\n", d, t, d*100.0/t);*/
      gdk_threads_enter();
      gtk_progress_set_value(GTK_PROGRESS(bar), d*100.0/t);
      gdk_threads_leave();
      return 0;
    }
     
    void *my_thread(void *ptr)
    {
      CURL *curl;
      CURLcode res;
      FILE *outfile;
      gchar *url = ptr;
     
      curl = curl_easy_init();
      if(curl)
      {
        outfile = fopen("test.curl", "w");
     
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);
        curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
        curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
        curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
        curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);
     
        res = curl_easy_perform(curl);
     
        fclose(outfile);
        /* always cleanup */
        curl_easy_cleanup(curl);
      }
     
      return NULL;
    }
     
    int main(int argc, char **argv)
    {
      GtkWidget *Window, *Frame, *Frame2;
      GtkAdjustment *adj;
     
      /* Must initialize libcurl before any threads are started */
      curl_global_init(CURL_GLOBAL_ALL);
     
      /* Init thread */
      g_thread_init(NULL);
     
      gtk_init(&argc, &argv);
      Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      Frame = gtk_frame_new(NULL);
      gtk_frame_set_shadow_type(GTK_FRAME(Frame), GTK_SHADOW_OUT);
      gtk_container_add(GTK_CONTAINER(Window), Frame);
      Frame2 = gtk_frame_new(NULL);
      gtk_frame_set_shadow_type(GTK_FRAME(Frame2), GTK_SHADOW_IN);
      gtk_container_add(GTK_CONTAINER(Frame), Frame2);
      gtk_container_set_border_width(GTK_CONTAINER(Frame2), 5);
      adj = (GtkAdjustment*)gtk_adjustment_new(0, 0, 100, 0, 0, 0);
      Bar = gtk_progress_bar_new_with_adjustment(adj);
      gtk_container_add(GTK_CONTAINER(Frame2), Bar);
      gtk_widget_show_all(Window);
     
      if (!g_thread_create(&my_thread, argv[1], FALSE, NULL) != 0)
        g_warning("can't create the thread");
     
     
      gdk_threads_enter();
      gtk_main();
      gdk_threads_leave();
      return 0;
    }

    5.  断点续传实例 

    //采用CURLOPT_RESUME_FROM_LARGE 实现文件断点续传功能
    #include <stdlib.h>
    #include <stdio.h>
    #include <sys/stat.h>
     
    #include <curl/curl.h>
    //这个函数为CURLOPT_HEADERFUNCTION参数构造
    /* 从http头部获取文件size*/
    size_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb, void *stream) {
           int r;
           long len = 0;
     
           /* _snscanf() is Win32 specific */
           // r = _snscanf(ptr, size * nmemb, "Content-Length: %ld\n", &len);
     r = sscanf(ptr, "Content-Length: %ld\n", &len);
           if (r) /* Microsoft: we don't read the specs */
                  *((long *) stream) = len;
     
           return size * nmemb;
    }
     
    /* 保存下载文件 */
    size_t wirtefunc(void *ptr, size_t size, size_t nmemb, void *stream)
    {
            return fwrite(ptr, size, nmemb, stream);
    }
     
    /*读取上传文件 */
    size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)
    {
           FILE *f = stream;
           size_t n;
     
           if (ferror(f))
                  return CURL_READFUNC_ABORT;
     
           n = fread(ptr, size, nmemb, f) * size;
     
           return n;
    }
     
    // 下载 或者上传文件函数
    int download(CURL *curlhandle, const char * remotepath, const char * localpath,
               long timeout, long tries)
    {
           FILE *f;
           curl_off_t local_file_len = -1 ;
           long filesize =0 ;
           
           CURLcode r = CURLE_GOT_NOTHING;
           int c;
      struct stat file_info;
      int use_resume = 0;
      /* 得到本地文件大小 */
      //if(access(localpath,F_OK) ==0)
      
        if(stat(localpath, &file_info) == 0) 
         {
            local_file_len =  file_info.st_size;
            use_resume  = 1;
          }
      //采用追加方式打开文件,便于实现文件断点续传工作
           f = fopen(localpath, "ab+"); 
           if (f == NULL) {
                  perror(NULL);
                  return 0;
           }
     
           //curl_easy_setopt(curlhandle, CURLOPT_UPLOAD, 1L);
     
           curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath);
     
                  curl_easy_setopt(curlhandle, CURLOPT_CONNECTTIMEOUT, timeout);  // 设置连接超时,单位秒
           //设置http 头部处理函数
           curl_easy_setopt(curlhandle, CURLOPT_HEADERFUNCTION, getcontentlengthfunc);
           curl_easy_setopt(curlhandle, CURLOPT_HEADERDATA, &filesize);
     // 设置文件续传的位置给libcurl
           curl_easy_setopt(curlhandle, CURLOPT_RESUME_FROM_LARGE, use_resume?local_file_len:0);
     
           curl_easy_setopt(curlhandle, CURLOPT_WRITEDATA, f);
           curl_easy_setopt(curlhandle, CURLOPT_WRITEFUNCTION, wirtefunc);
     
           //curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc);
           //curl_easy_setopt(curlhandle, CURLOPT_READDATA, f);
           curl_easy_setopt(curlhandle, CURLOPT_NOPROGRESS, 1L);
           curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 1L);
      
      
      r = curl_easy_perform(curlhandle);
           
     
           fclose(f);
     
           if (r == CURLE_OK)
                  return 1;
           else {
                  fprintf(stderr, "%s\n", curl_easy_strerror(r));
                  return 0;
           }
    }
     
    int main(int c, char **argv) {
           CURL *curlhandle = NULL;
     
           curl_global_init(CURL_GLOBAL_ALL);
           curlhandle = curl_easy_init();
     
           //download(curlhandle, "ftp://user:pass@host/path/file", "C:\\file", 0, 3);
      download(curlhandle , "http://software.sky-union.cn/index.asp","/work/index.asp",1,3);
           curl_easy_cleanup(curlhandle);
           curl_global_cleanup();
     
           return 0;
    }

     

    参考博客:

    https://blog.csdn.net/weixin_33913332/article/details/93897025

     

    展开全文
  • windows 下curl安装包下载

    热门讨论 2015-05-25 10:23:17
    这是我在网上下载好的,大家下载解压,在系统变量里配置一下路径即可使用
  • curl使用指南

    千次阅读 2021-08-22 12:27:48
    curl是一个命令行工具,通过指定的URL来上传或下载数据,并将数据展示出来。curl中的c表示client,而URL,就是URL。这里我们介绍一下curl的使用。 1. 命令行基础 1.1 命令行选项 1. 短形式 在curl中可以使用短形式的...

    curl是一个命令行工具,通过指定的URL来上传或下载数据,并将数据展示出来。curl中的c表示client,而URL,就是URL。这里我们介绍一下curl的使用。

    1. 命令行基础

    1.1 命令行选项

    1. 短形式

    在curl中可以使用短形式的命令行选项,比如通知curl打开verbose模式,可以使用-v选项:

    $ curl -v www.baidu.com
    

    这里,-v就是短形式的选项,我们使用一个中划线(-)并紧跟着一个字母来指定一个短形式的选项。

    在这个例子中,-v就像一个开关一样,指定某个变量是false还是true。我们可以在一个中划线后面跟多个单字母的选项:

    $ curl -vL www.baidu.com
    

    在curl中,命令行解析器总是解析整个命令行,因此,选项可以放在整个命令行的任何位置:

    $ curl www.baidu.com -vL
    

    这个和上面的命令具有同样的效果。当然,虽然是任何位置,但不能放在curl前面啊:

    $ -vL curl www.baidu.com    // No command '-vL' found
    

    2. 长形式

    单个字母的选项敲起来和用起来都很方便,但是字母的个数有限而需要控制的东西又太多,这个时候就可以使用选项的长形式。同样,为了使得命令便于阅读,绝大多数短形式都有一个对应的长形式。

    和短形式不同的是,长形式的选项使用两个中划线(–)指定,然后紧跟着具体的选项。还有就是,在使用长形式的时候,后面只能跟一个选项。对于-v,对应的长形式如下:

    $ curl --verbose www.baidu.com
    

    同样,长形式的选项也可以出现在命令的任何地方:

    $ curl www.baidu.com --verbose
    

    对于-vL来说,对应的长形式可以是:

    $ curl --verbose --location www.baidu.com
    

    或者:

    $ curl --location www.baidu.com --verbose
    

    3. 选项的参数

    在上面的命令中选项-v(或--verbose)以及-L(或--location)都是bool类型的标志位,来告诉curl打开或关闭某些特征。curl还有一种类型的选项,就是需要传递一些参数。比如,如果想在一个HTTP POST中向服务器传递一个字符串:

    $ curl -d arbitrary http://example.com
    

    同样,也可以使用相应的长形式:

    $ curl --data arbitrary http://example.com
    

    4. 参数有空格?

    在上面的例子中,我们的参数arbitrary是一个连续的字符串,但是当我们需要传递一个有空格的参数怎么办?比如Are you OK?,这时我们需要使用引号把参数括起来:

    $ curl -A "Are you OK?" http://example.com
    

    如果不加引号的话:

    $ curl -A Are you OK? http://example.com
    

    那么curl只会把Are当做用户的参数,剩下的字符,youOK?会被curl当做额外的URL处理,因为这里并没有用-指定这是一个选项。

    但是如果参数本身有引号的时候怎么办?这在使用JSON传递参数的时候尤其常见,我们可以使用单引号把参数括起来(不过在Windows中不管用):

    $ curl -d '{"name":"fool"}' http://example.com
    

    当数据很多时,我们可以指定一个文件,来传递给curl:

    $ curl -d @params.json http://example.com
    

    5. Say No

    对于像-t-L之类的标志选项,我们可以在长形式的前面加上no-前缀来指定关闭相应的特征,比如关闭verbose模式:

    $ curl --no-verbose http://example.com
    

    1.2 URL

    curl支持在一个命令行中处理多个URL,中间用空格间隔即可。curl会对传进来的URL做简单的验证,而不会去验证URL是否真正有效,因此,这里需要使用者提供有效的URL。

    前面说过,curl首先解析整个命令行,将得到选项应用于所有的URL上。如果想对每一个URL使用不同的选项,那么可以使用--next来指定。比如:

    $ curl --location http://example.com/1 
        --next --data sendthis http://example.com/2 
        --next head http://example.com/3
    

    1. 配置文件

    如果选项过多,导致命令很难输入,或者超过了系统命令最大长度的限制,我们可以使用配置文件(config file)来指定curl的选项。

    通过使用-K--config选项来告诉curl从指定的文件中读取选项,比如:

    $ curl -K curl.options http://example.com
    

    在文件curl.options中,列出所有需要的选项:

    # ask curl to follow redirects
    --location
    # ask curl to do a HEAD request
    --head
    

    和在命令行中一样,在配置文件中也可以使用长形式或短形式,甚至在配置文件中对于长形式可以省略那两个中划线(–):

    # ask curl to follow redirects
    location
    # ask curl to do a HEAD request
    head
    

    对于使用参数的选项,同样可以使用配置文件:

    # ask curl to change the User-Agent in HTTP header
    user-agent "something-is-an-agent"
    

    既然叫做配置文件,那么上面的选项也可以写作:

    # ask curl to change the User-Agent in HTTP header
    user-agent = "something-is-an-agent"
    

    甚至可以省略没有空格的参数的引号:

    # ask curl to change the User-Agent in HTTP header
    user-agent = something-is-an-agent
    

    当然,如果参数中有空格的话就不能省略引号了。

    2. 开始使用curl

    在前面我们简单地介绍了什么是curl以及一些基础的命令行知识。我们通过命令行的方式将需要处理的URL交给curl去处理。

    在这里,我们开始着手使用curl,了解curl能做什么以及如何去做。

    2.1 Verbose模式

    如果curl得到的结果不是期望的结果,我们可以使用-v--verbose进入Verbose模式获取更多的信息。

    1. 查看通信过程

    在Verbose模式中,curl会得到更多的对话式信息,帮助我们了解发生了什么。curl会在每一个信息前面加上*进行标识。在下面的例子中,我们将百度的首页保存下来(使用-o选项并指定参数baidu):

    $ curl -v www.baidu.com -o baidu
    

    我们可以得到如下的信息:

    * About to connect() to www.baidu.com port 80 (#0)
    *   Trying 14.215.177.39... connected
    * Connected to www.baidu.com (14.215.177.39) port 80 (#0)
    > GET / HTTP/1.1
    > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    > Host: www.baidu.com
    > Accept: */*
    >
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0< HTTP/1.1 200 OK
    < Accept-Ranges: bytes
    < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    < Connection: Keep-Alive
    < Content-Length: 2381
    < Content-Type: text/html
    < Date: Fri, 14 Sep 2018 09:55:18 GMT
    < Etag: "588604dd-94d"
    < Last-Modified: Mon, 23 Jan 2017 13:27:57 GMT
    < Pragma: no-cache
    < Server: bfe/1.0.8.18
    < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
    <
    { [data not shown]
    103  2381  103  2381    0     0   113k      0 --:--:-- --:--:-- --:--:--  232k* Connection #0 to host www.baidu.com left intact
    
    * Closing connection #0
    

    下面的信息是建立一个链接:

    * About to connect() to www.baidu.com port 80 (#0)
    *   Trying 14.215.177.39... connected
    * Connected to www.baidu.com (14.215.177.39) port 80 (#0)
    

    然后就是本次的HTTP请求:

    > GET / HTTP/1.1
    > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    > Host: www.baidu.com
    > Accept: */*
    >
    

    接下来是数据的传输过程。然后就是响应:

    < HTTP/1.1 200 OK
    < Accept-Ranges: bytes
    < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    < Connection: Keep-Alive
    < Content-Length: 2381
    < Content-Type: text/html
    < Date: Fri, 14 Sep 2018 09:55:18 GMT
    < Etag: "588604dd-94d"
    < Last-Modified: Mon, 23 Jan 2017 13:27:57 GMT
    < Pragma: no-cache
    < Server: bfe/1.0.8.18
    < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
    <
    

    连箭头都不一样了。

    2. 更详细的信息

    如果觉得使用-v的信息还不够的话,还可以使用--trace [filename]选项来讲完整的流保存到filename中。比如:

    $ curl --trace dump www.baidu.com
    

    之后,就可以发现一个新的文件dump,里面保存着刚才那个会话的所有信息:

    == Info: About to connect() to www.baidu.com port 80 (#0)
    == Info:   Trying 14.215.177.39... == Info: connected
    == Info: Connected to www.baidu.com (14.215.177.39) port 80 (#0)
    => Send header, 166 bytes (0xa6)
    0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1..
    0010: 55 73 65 72 2d 41 67 65 6e 74 3a 20 63 75 72 6c User-Agent: curl
    0020: 2f 37 2e 31 39 2e 37 20 28 78 38 36 5f 36 34 2d /7.19.7 (x86_64-
    0030: 72 65 64 68 61 74 2d 6c 69 6e 75 78 2d 67 6e 75 redhat-linux-gnu
    0040: 29 20 6c 69 62 63 75 72 6c 2f 37 2e 31 39 2e 37 ) libcurl/7.19.7
    0050: 20 4e 53 53 2f 33 2e 32 37 2e 31 20 7a 6c 69 62  NSS/3.27.1 zlib
    0060: 2f 31 2e 32 2e 33 20 6c 69 62 69 64 6e 2f 31 2e /1.2.3 libidn/1.
    0070: 31 38 20 6c 69 62 73 73 68 32 2f 31 2e 34 2e 32 18 libssh2/1.4.2
    0080: 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 62 61 69 64 ..Host: www.baid
    0090: 75 2e 63 6f 6d 0d 0a 41 63 63 65 70 74 3a 20 2a u.com..Accept: *
    00a0: 2f 2a 0d 0a 0d 0a                               /*....
    <= Recv header, 17 bytes (0x11)
    0000: 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK.
    0010: 0a                                              .
    <= Recv header, 22 bytes (0x16)
    0000: 41 63 63 65 70 74 2d 52 61 6e 67 65 73 3a 20 62 Accept-Ranges: b
    0010: 79 74 65 73 0d 0a                               ytes..
    

    文件的前21行如上所示。每一个发送和接收的数据以十六进制的形式保存起来了,方便以后的分析。

    如果觉得十六进制没啥帮助的话,可以使用--trace-ascii [filename]选项:

    $ curl --trace-ascii dump www.baidu.com
    

    结果如下:

    == Info: About to connect() to www.baidu.com port 80 (#0)
    == Info:   Trying 14.215.177.38... == Info: connected
    == Info: Connected to www.baidu.com (14.215.177.38) port 80 (#0)
    => Send header, 166 bytes (0xa6)
    0000: GET / HTTP/1.1
    0010: User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7
    0050:  NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
    0082: Host: www.baidu.com
    0097: Accept: */*
    00a4:
    <= Recv header, 17 bytes (0x11)
    0000: HTTP/1.1 200 OK
    <= Recv header, 22 bytes (0x16)
    0000: Accept-Ranges: bytes
    <= Recv header, 76 bytes (0x4c)
    0000: Cache-Control: private, no-cache, no-store, proxy-revalidate, no
    0040: -transform
    <= Recv header, 24 bytes (0x18)
    0000: Connection: Keep-Alive
    <= Recv header, 22 bytes (0x16)
    0000: Content-Length: 2381
    

    上面就是前21行的输出。

    3. Silence

    verbose模式的对立模式,就是silence,可以使用-s--silence选项来告诉curl不输出任何程序的信息或者错误信息,但也会输出响应的结果。

    如果需要在有错误的时候输出错误信息,可以使用-S--show-error来指定。

    2.2 浏览器到curl

    别人使用浏览器发起了一个请求之后,如果自己想用curl再来一次同样的请求,这里日常的工作中是比较常见的一个操作。在curl中,有没有什么比较简便快捷的方式来获得curl命令呢?

    Chrome浏览器和Firefox浏览器都实现了复制成curl的工具,可以将浏览器的请求快速复制成curl命令,非常方便快捷。

    1. Chrome

    在Chrome中,打开More tools->Developer模式,选择Network选项卡,然后就可以看到所有的请求,选中相应的请求,右键就有Copy as cURL选项,单击就可以了。

    img

    2. Firefox

    在Firefox中,打开Web Developer->Network工具,然后右键想要复制的链接,就有一个Copy as cURL的选项,单击就可以了。

    3. HTTP与curl

    与curl一起使用的协议,最多的还是HTTP,这里就将介绍如何有效地使用curl来发送HTTP请求。

    3.1 HTTP方法

    在每一个HTTP请求中,都有一个对应的方法,常用的方法有:GETPOSTHEADPUT

    如果在一个curl命令中不指定具体的方法,那么默认的就是使用GET方法。对于其它的方法,可以在curl命令中指定:

    methodoption
    POST-d-F
    HEAD-I
    PUT-T

    3.2 Header

    在curl中,使用-i选项可以显示Response的Header信息,连同Body数据:

    $ curl -i www.baidu.com
    

    结果:

    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    Connection: Keep-Alive
    Content-Length: 2381
    Content-Type: text/html
    Date: Mon, 17 Sep 2018 10:26:42 GMT
    Etag: "588604dd-94d"
    Last-Modified: Mon, 23 Jan 2017 13:27:57 GMT
    Pragma: no-cache
    Server: bfe/1.0.8.18
    Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
    
    <!DOCTYPE html>
    <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta
    http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=styleshee
    t type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就
    知道</title></head> <body link=#0000cc> ... </body> </html>
    

    使用-I选项可以只显示Response的Header信息:

    $ curl -I www.baidu.com
    

    3.3 POST

    POST是HTTP中向服务端提交数据的一种方法。在浏览器中,但在表单中填写完数据后,浏览器就会默认将填写的数据使用key=value串的形式进行转化。在curl中,我们可以使用-d--data选项来指定具体的数据:

    $ curl -d key1=value1&key2=value2 http://example.com
    

    我们也可以使用多个-d选项来指定多组数据,curl会自动把这些数据连接起来,因此上面的例子还可以这样:

    $ curl -d key1=value1 -d key2=value2 http://example.com
    

    当然,如果数据过多,我们还可以把数据放在一个文件中:

    $ curl -d @filename http://example.com
    

    1. Content-Type

    当使用POST方法提交数据时,对于提交的数据主要有如下四种形式:

    • application/x-www-form-urlencoded:默认的形式,即key1=value1&key2=value2的形式;
    • multipart/form-data:使用表单上传文件时使用这个形式;
    • application/json:提交JSON格式的数据;
    • text/xml:提交XML格式的数据。

    Content-Type是一个Header,如果不指定的话,那么默认就是使用application/x-www-form-urlencoded形式传输数据,当需要使用别的形式进行数据传输的话,那么就需要指定这个Header:

    $ curl -d '{I Am A JSON FORM}' -H 'Content-Type: application/json' http://example.com
    

    其中,-H就是用来指定一个具体的Header的选项,值就是key=value 的形式。当需要指定其它的Header,可以使用-H选项。

    2. POST一个二进制数据

    在curl中,我们也可以提交一个文件,可以使用--data-binary选项来指定一个文件:

    $ curl --data-binary @filename http://example.com
    

    3. 转化成一个GET

    使用-G-get选项,可以把一个POST请求转化成一个GET请求。如果有-d选项指定的参数,那么curl就会把-d后面的数据添加到URL的后面,用?连接。比如:

    $ curl -d "key1=value1" -G http://example.com
    

    得到的请求URL就是:

    http://example.com/?key1=value1
    

    4. URL编码

    如果使用的数据没有编码,那么可以指定curl来帮助自己进行编码。这时可以使用--data-urlencode选项来指定。比如:

    $ curl --data-urlencode "name=Alan Walker" http://example.com
    

    5. multipart formposts

    如果一个HTTP POST具有如下形式的表单:

    <form action="submit.cgi" method="post" enctype="multipart/form-data">
        Name: <input type="text" name="person"><br>
        File: <input type="file" name="secret"><br>
        <input type="submit" value="Submit">
    </form>
    

    用户可以在Name中填写名字,在File中选择一个文件,然后单击Submit按钮提交数据。

    为了可以在curl中模拟这个请求,我们可以使用-F--form选项来指定数据:

    $ curl -F person=annonymous -F secret=@filename http://example.com/submit.cgi
    

    在上面的表单中,action指定了这个请求发送到哪里;method指定这是一个POST请求;而enctype指定了这是一个multipart formpost。

    当执行上面的curl命令后,curl会产生如下的请求头:

    POST /submit.cgi HTTP/1.1
    Host: example.com
    User-Agent: curl/7.46.0
    Accept: */*
    Content-Length: 313
    Content-Type: multipart/form-data; boundary=------------------------d74496d66958873e
    

    其中Content-Type是和enctype一致的。

    当使用-F选项时,默认的Content-Type就是multipart/form-data,不过,我们也可以使用-H进行指定:

    $ curl -F 'name=Dan' -H 'Content-Type: multipart/magic' https://example.com
    

    6. -d vs -F

    在前面我们介绍了使用-d构造一个基本的POST请求,和-F构造一个multipart formpost请求。那么这两个选项有啥区别以及什么时候使用呢?

    这两个选项都是把指定的数据发送到服务器上,区别在于数据传递的格式。大多数时候,接收端来指定希望客户端发送数据的格式,客户端不能随意自己指定格式。

    • HTML表单

    当使用HTML表单时,会使用<form>标签指定一个表单,这会让浏览器使用POST方法。如果标签中含有enctype=multipart/form-data,这意味着使用multipart formpost方式,在curl中就是使用-F选项。一个典型的场景就是表单中含有<input type=file>标签。

    • 不用HTML表单

    POST方法不一定非要在HTML中,在好多的service、APIs中,也可以使用POST请求。

    如果这些service期望使用JSON或者其它类似的格式的数据,那么这就是一个普通的POST请求。在curl中就可以使用-d选项。不过要注意-d的默认Content-Type是不是期望的格式,如果不是的话,可以使用-H进行更改。

    3.4 HTTP重定向(redirect)

    重定向是HTTP协议中的一个基础部分。在重定向中,服务器给客户端的并不是客户端想要的内容,而是一个车具体的指令,告诉客户端如果想获取想要的数据,应该到哪里去请求。

    但不是所有的重定向都一样。重定向之后的请求使用什么方法呢?重定向多久呢?

    所有的重定向都会返回Location:的Header,来指定一个新的URL。

    1. curl:redirect

    在curl中,默认不会重定向,可以使用-L--location选项来告诉curl重定向:

    $ curl -L http://example.com
    

    2. GET还是POST

    第一次请求后,服务器会告诉客户端下一次请求需要使用的方法。关于重定向的响应码如下:

    MethodPermanentTemporary
    切换到GET301302和303
    使用第一次请求的方法308307

    我们可以指定curl在重定向时使用什么方法。如果我们第一次请求使用的不是GET方法,重定向后也不希望curl默认使用GET方法,那么我们可以使用--post301,--post302--post303选项来指定。

    3.5 修改HTTP请求

    每一个请求都有一个请求行、一些请求头和可选的请求体,这里我们看看在curl中可以具体修改的部分,包括请求行和请求头。

    1. 请求方法

    在请求行中包含这次请求所使用的方法。我们使用下面的简单命令就可以进行一个GET方法:

    $ curl http://example.com/file
    

    这会生成如下的请求行:

    GET /file HTTP/1.1
    

    在***HTTP方法***中我们可以通过具体的选项指定使用什么方法。这里我们也可以使用-X选项来进行指定:

    $ curl -X POST http://example.com
    

    2. 修改请求头

    在curl中,我们可以使用-H--header选项来指定Header。之前我们就使用-H指定了Content-Type,其实Header就是一个key: value对:

    $ curl -H "HeaderName: HeaderValue" http://example.com
    

    3. Referer

    我们还可以在curl通过--referer选项来指定我们是从哪里跳转过来的:

    $ curl --referer http://fromexample.com http://toexample.com
    

    4. User Agent

    这个字段是用来表示客户端的设备信息的,服务器会根据这个字段,针对不同的设备,返回不同格式的网页。在curl中,可以使用--user-agent选的来指定:

    $ curl --user-agent "[User Agent]" http://example.com
    

    3.6 Cookies

    HTTP是一种无状态的协议,为了在会话中保存一些状态,可以使用Cookies。服务器通过Set-Cookie:来设置Cookie,客户端就可以在下一次请求中携带这些数据。

    1. 设置Cookie

    我们可以使用--cookie选项来设置一个Cookie:

    $ curl --cookie "CookieName=CookieValue" http://example.com
    

    2. 从文件中读取Cookies

    curl默认不会记住服务器设置的Cookie,也不会在下一次请求中携带Cookie。除非用户通过选项自己设置。

    我们可以把之前的Cookies保存到一个文件,然后在下一次请求中指定curl读取文件中的Cookies:

    $ curl -b cookies.txt http://example.com
    

    -b选项指定curl去给定的文件中读取Cookies。

    不过要主要,这里仅仅是读取Cookies,如果这次请求中服务器修改了Cookie,那么curl是不会进行保存的,除非我们手动指定。

    3. 写Cookies到文件

    我们可以使用-c选项指定curl保存这次请求中服务器设置的Cookies:

    $ curl -c cookie.jar.txt http://example.com
    

    有时,我们既需要从文件中读取Cookies,也需要保存服务器设置的Cookies。那么就可以同时使用-b-c选项:

    $ curl -b cookies.txt -c cookie.jar.txt http://example.com
    

    作者:今天中午吃啥
    链接:https://www.jianshu.com/p/fc0eb6c60816
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • c++封装curl,实现get,post,download

    热门讨论 2015-07-24 16:16:12
    c++封装了curl的get,post,download
  • Linux curl 命令下载文件

    千次阅读 2022-04-18 11:18:27
    命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。 语法:# curl ...
  • Linux curl 命令详解

    万次阅读 多人点赞 2019-08-08 17:10:28
    curl 是一个工具,用于传输来自服务器或者到服务器的数据。「向服务器传输数据或者获取来自服务器的数据」 可支持的协议有(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、...
  • curl-7.42.0-win64.zip

    2015-05-11 11:08:30
    curl-7.42.0-win64.zip
  • Linux curl 常用示例

    千次阅读 2019-08-09 11:33:41
    本篇文章包含了curl的常用案例使用。 如果想了解curl选项的详细说明,请参考前一篇文章「Linux curl 命令详解」。 常见网页访问示例 基本用法 访问一个网页 curl https://www.baidu.com 执行后,相关的网页信息会...
  • curl的HTTP参数速查表

    千次阅读 2022-01-18 19:32:39
    curl是一个开源的命令行工具,它基于网络协议,对指定URL进行网络传输,得到数据后不任何具体处理(如:html的渲染等),直接显示在"标准输出"(stdout)上。
  • curl命令详解

    万次阅读 2021-01-19 21:01:00
    常用参数详解 参数 描述 -I/–head 只显示传输文档,...-S/–show-error 显示错误,在选项 -s 中,当 curl 出现错误时将显示 -L/–location 跟踪重定向 -f/–fail 不输出错误 -n/–netrc 从netrc文件中读取用户名和密码
  • Curl 下载安装和配置

    万次阅读 多人点赞 2019-09-30 19:34:36
    Curl 就是一个可以通过命令行发送GET,POST 等多种协议请求的工具。
  • curl命令用法

    千次阅读 2019-10-29 22:50:42
    1. CURL命令简介 CURL(CommandLine Uniform Resource Locator),是一个利用 URL 语法,在命令行终端下使用的网络请求工具,支持 HTTP、HTTPS、FTP 等协议。CURL 也有用于程序开发使用的版本 libcurl。 Linux、...
  • Linux curl命令详解

    千次阅读 2020-12-24 23:23:10
    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是...语法:# curl [option] [url]常见参数:-A/--user-agent 设置用户代理发送给服务器-b/--cookie cookie字符串或文件读取位置-c/--cookie-j...
  • CURL常用命令

    千次阅读 2020-12-31 10:19:12
    下载单个文件,默认将输出打印到标准输出中(STDOUT)中curl http://www.centos.org通过-o/-O选项保存下载的文件到指定的文件中:-o:将文件保存为命令行中指定的文件名的文件中-O:使用URL中默认的文件名保存文件到...
  • Linux Shell脚本编程--curl命令详解

    千次阅读 2020-12-24 23:23:21
    其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息。类似的工具还有wget。curl命令使用了libcurl库来实现,libcurl库常用在C程序中用来处理HTTP请求,curlpp是libcurl的一个C++封装...
  • curl-7.33.0-win64-ssl-sspi.zip

    千次下载 热门讨论 2014-11-14 16:17:17
    curl-7.33.0-win64-ssl-sspi.zip
  • Windows安装curl及基本命令

    千次阅读 2020-05-13 13:38:11
    什么是curl命令? curl是利用URL语法在命令行方式下工作的开源文件传输工具。被广泛应用在Unix、多种Linux发行版本中,并且有DOS和win32、win64下的移植版本。 在Windows下使用curl命令 安装 1:进入curl官网...
  • curl详解

    千次阅读 2019-08-24 16:09:48
    其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息。类似的工具还有wget。 curl命令使用了libcurl库来实现,libcurl库常用在C程序中用来处理HTTP请求,curlpp是libcurl的一个C++...
  • $cl = curl_init(); //初始化 curl_setopt($cl, CURLOPT_URL, $url); //设置 cURL 传输选项 curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1); // 将curl_exec()获取的信息以字符串返回,而不是直接输出。  curl...
  • 二、Linux curl命令代理设置参数: 三、Linux curl命令设置代理举例: 1、linux curl命令设置http代理: 2、Linux curl命令设置socks代理: 四、测试代理的隐匿度: 1、测试前准备: 2、测试使用不同代理输出...
  • linux使用curl发送http get与post请求

    千次阅读 2020-09-25 14:11:58
    1. curl发送get请求 curl http://11.120.12.89:6666/sengMsg?phone=18790987654\&name=lily&msg=aaa 注意:有多个参数时需要把&转义一下,否则获取不到之后参数会报错 2. curl发送post请求 post请求...
  • curl常用参数详解及示例

    千次阅读 2022-01-20 20:21:30
    curl是一个开源的命令行工具,它基于网络协议,对指定URL进行网络传输,得到数据后不任何具体处理(如:html的渲染等),直接显示在"标准输出"(stdout)上。
  • CURL 发送POST请求

    万次阅读 2020-08-18 10:41:47
    CURL 发送POST请求 curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://192.168.0.1:8001/test" 参数 内容 -H 请求头 -d POST内容 -X ...
  • Linux:curl 模拟 https(TLS/SSL)

    千次阅读 2020-12-09 15:15:38
    https curl模拟测试 http+TLS/SSL TLS SSL 双向鉴权认证 单向鉴权

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 473,207
精华内容 189,282
关键字:

curl