cURL-7.72.0初体验(参数写法)

2020-10-23 10:10:22 浏览数 (1)

“不用等到日出,现在就想对你告白” 在所有特质中,最吸引我的还是温柔,因为它是上天赠予的礼物,我喜欢温柔的人,也喜欢愿意对我温柔的人。 哒哒哒

这个东西其实就是我现在的写法就是最正宗的写法,就是小写C,大写URL,一定要写对,显得你专业不说,其实更是对软件的一种敬意吧。

因为看见一本这个有趣的书,我就没有干什么插文档的动作,就是实验一下吧。我多次编译东西也可以过这个东西。让我写写看。如果你也愿意探索请和我一起来。

我的环境是Mac,自己你们对照一下版本哦

有了brew直接安装,很快吧。

我第一次输入错了

我们其实可以看到一些有趣的东西

就是brew安装软件在哪些地方找。自己看看

看看安装目录

可以直接help

--help,标准的unix长参数写法


目前为止我都是一些习惯性的动作,还没有开始说什么~

命令行、引号和别名

curl可以用于不同的命令行、shell和命令提示符。它们具有各自的限制、规则和需要遵循的指南。curl的目标是能够顺畅地在这些环境中运行,但有时你的命令行系统会与其他人使用的或文档中记录的不同。

例如,不同的命令行系统中引号的用法可能存在差异。使用引号将命令行参数括起来,就可以在参数中嵌入空格和特殊符号。在大多数Unix风格的shell中,你可以使用双引号(")和单引号('),具体取决于你是否允许在字符串中使用变量扩展,但Windows不支持单引号。

在Windows的PowerShell这样的环境中,当用户输入curl时,命令行系统可能会优先使用其他工具代替curl。要想在PowerShell中正确使用curl,需要输入它的全名,包括扩展名:“curl.exe”。

不同的命令行系统允许的最大命令行长度也不相同,并强制用户限制单个命令行的数据量。curl提供了-K选项,以通过文件或标准输入(stdin)来提供命令行选项

种瓜得瓜,种豆得豆

curl很少会自己决定做什么,它试图在最大程度上让你做自己想做的。你给它什么,它就会处理什么。如果你提供一个拼写错误的选项,那么它可能会做出预想不到的事情。如果你给它一个不合法的URL,那么它仍然会继续处理它。这意味着,你可以通过选项传给它一些疯狂的数据,它会在传输操作中传递这些数据。

这是一种设计选择,它允许你调整curl如何进行协议通信,让你能够以最具创造性的方式与服务器交互。

短选项

命令行选项可以将你想要用curl执行的任务的信息传给curl。例如,你可以通过-v选项让curl切换到详细(verbose)模式。

代码语言:javascript复制
        curl -v http://example.com
代码语言:javascript复制
✘ yunshenwuji@yunswj  ~  curl -v http://example.com
*   Trying 93.184.216.34...
* TCP_NODELAY set
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Age: 428953
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Sun, 11 Oct 2020 13:55:21 GMT
< Etag: "3147526947 ident"
< Expires: Sun, 18 Oct 2020 13:55:21 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (sjc/4FB8)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
<
<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
* Connection #0 to host example.com left intact
* Closing connection 0

-v是一种“短选项”,即一个减号后面跟一个字母。很多选项属于切换开关,用于启用某些功能或切换两个已知状态。指定对应的选项名称即可使用这些选项。你也可以在减号后面组合使用多个单字母选项。例如,让curl打开详细模式并进行HTTP重定向:

代码语言:javascript复制
     curl -vL http://example.co

这个是页面

发现(command)WIN D是分屏

curl的命令行解析器会解析整行命令,你可以将选项放在任意位置,它们甚至可以出现在URL之后。

代码语言:javascript复制
 curl http://example.com -Lv

当然,你也可以单独指定短选项,如下所示。

代码语言:javascript复制
       curl -v -L http://example.com
代码语言:javascript复制
*   Trying 93.184.216.34...
* TCP_NODELAY set
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Age: 429237
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Sun, 11 Oct 2020 14:00:03 GMT
< Etag: "3147526947 ident"
< Expires: Sun, 18 Oct 2020 14:00:03 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (sjc/16DD)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
<
<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
* Connection #0 to host example.com left intact
* Closing connection 0

长选项

短选项使用起来非常方便,因为它们的名字很简短。但因为字母的数量有限,需要用到的选项又比较多,所以并非所有选项都可以使用单个字母来表示,于是就有了长选项。另外,为了方便,也为了让脚本更易于阅读,大多数短选项都有对应的长选项别名。

长选项使用两个减号(或者称为破折号),后面跟上选项名,而且每两个减号后面只能跟一个选项名。使用长选项打开详细模式如下所示。

代码语言:javascript复制
        curl --verbose http://example.com

使用长选项进行HTTP重定向如下所示。

代码语言:javascript复制
  curl --verbose --location http://example.com
代码语言:javascript复制
* IDN support not present, can't parse Unicode domains
*   Trying 93.184.216.34...
* TCP_NODELAY set
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 400 Bad Request
< Content-Type: text/html
< Content-Length: 349
< Connection: close
< Date: Sun, 11 Oct 2020 14:02:13 GMT
< Server: ECSF (sjc/4E5D)
<
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>400 - Bad Request</title>
  </head>
  <body>
    <h1>400 - Bad Request</h1>
  </body>
</html>
* Closing connection 0

选项的参数

并非所有选项都只用于启用或禁用某项功能。对于一些选项,你需要向它们传递一些数据,如用户名或文件路径。你需要先指定选项,然后给出参数,中间用空格分隔。例如,可以通过HTTP POST将一个字符串发送给服务器。

代码语言:javascript复制
       curl -d arbitrary http://example.com

你也可以使用长选项。

代码语言:javascript复制
     curl --data arbitrary http://example.com

实际上,如果使用带参数的短选项,可以不使用空格进行分隔。

代码语言:javascript复制
      curl -darbitrary http://example.com

带空格的参数

有时你会想要向选项传递参数,而且参数中包含了一个或多个空格。例如,你可能想要将user-agent字段设置为I am your father,包括当中的三个空格。此时你需要给字符串加上引号。使用的引号因不同的shell或命令提示符而异,但大多数情况下可以使用双引号。

代码语言:javascript复制
      curl -A "I am your father" http://example.com

如果没有使用引号,则如下所示。

代码语言:javascript复制
  curl -A I am your father http://example.com

这样一来,curl只会将“I”作为user-agent字符串,剩下的字符串“am”“your”等将被视为单独的URL,因为它们不是以-开头,这表示它们不是选项,而curl只处理选项和URL。

如果字符串本身包含了双引号,比如想要向服务器发送JSON字符串(这种情况很常见),你可能需要使用单引号(但在Windows系统上使用单引号可能不行)。发送JSON字符串{ "name":"Darth" }就是一个很好的示例。

代码语言:javascript复制
      curl -d '{ "name": "Darth" }' http://example.com

如果想要避免使用单引号,则可以通过文件将数据传给curl,这样就无须使用额外的引用。假设json文件包含了上述数据:

代码语言:javascript复制
        curl -d @json http://example.com

负选项

对于开关选项,既可以用它们打开某些功能,也可以通过它们关闭功能。你也可以使用长选项,在选项名前面加上“no-”前缀。例如,关闭详细模式。

代码语言:javascript复制
        curl --no-verbose http://example.com

不同版本的选项

curl最早于1998年出现在命令行中。它被用于访问指定的URL,有的没有使用选项,有的使用一个或多个选项。

从那时起,我们加入了更多选项。我们一直在添加选项,几乎每个新版本都会添加一个或几个新选项,以便用户可以更灵活地使用curl。

curl每八周就会发布一个新版本,因此不可避免的是,你并不总能使用到最新版的curl。有时你使用的可能是几年前的版本。

本书中所描述的命令行选项都是在某个时间点添加到curl中的,其中只有很小一部分是在1998年的首个版本中发布的。你可以检查一下自己的curl版本,并交叉检查curl手册页,看看相应的选项是在什么时候添加的。如果要将基于新curl版本编写的curl命令行用于带有旧版本curl的操作系统,那么这一点尤为重要。

curl的开发人员努力不去改变已有行为。1998年、2003年或2010年编写的命令行都可以不经修改直接使用现今的curl来运行。

0 人点赞