curl命令总结

描述

curl 是一种使用 URL 从服务器传输数据或向服务器传输数据的工具。它支持以下协议:DICT、FILE、FTP、FTPS、GOPHER、GOPHERS、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、MQTT、POP3、POP3S、RTMP、RTMPS、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、TELNET、TFTP、WS 和 WSS。

curl参数

  • -o/--output:指定输出文件的名称,用于下载文件时保存到指定位置。
  • -O/--remote-name:根据URL中的文件名部分来保存文件,这在下载时特别有用。
  • -T/--upload-file:上传文件时使用,指定要上传的本地文件。
  • -e/--referer:设置HTTP Referer头部,用于伪造来源页面或进行盗链。
  • -A/--user-agent:设置User-Agent字符串,模仿浏览器或其他客户端。
  • -X/--request:指定HTTP请求方法,如GET、POST等。
  • -d/--data:发送HTTP POST请求时,附带的数据。
  • -b/--cookie:设置Cookie字符串,用于处理会话。
  • -s/--silent:静默模式,不显示进度和错误信息。
  • -S/--show-error:显示错误信息,即使使用了-s选项。
  • -L/--location:跟随重定向,如果请求的页面被移动了,这个选项会让curl重新定向到新的地址。
  • -i/--include:在输出中包含HTTP响应头。
  • -v/--verbose:详细模式,显示所有通信过程。
  • -H/--header:自定义HTTP头部信息。
  • --trace:跟踪请求的所有步骤,用于调试。
  • --limit-rate:限制数据传输速率。
  • --connect-timeout:设置连接超时时间。

RESTful风格

传参方式

  • URL路径参数:在URL中指定路径参数,例如:

    curl http://example.com/resource/123

  • paramter传参:使用-G参数发送GET请求,并使用-d--data参数传递参数,例如:

    curl -G -d "param1=value1&param2=value2" http://example.com/resource

  • 请求体(body)中发送数据:使用-d--data参数发送POST请求,并在请求体中传递数据,例如:

    curl -X POST -d "param1=value1&param2=value2" http://example.com/resource

  • 请求头传参:使用-H参数设置HTTP头部信息,例如:

    curl -H "Content-Type: application/json" -H "Authorization: Bearer token" http://example.com/resource

  • Basic传参:

​​​​​​​

  ​​​​​​​curl -X POST -u "admin:admin" -H "Content-Type: application/json" -d  '{"username":"admin","password":"admin"}' http://127.0.0.1:8099/test/v1/login​​​​​​​​​​​​​​​​​​​​​

             或者

        Authorization: Basic  为固定格式 ,dGVzdDp0ZXN0为test:test的base64编码,test:test代表用户名密码

curl -X GET -H "Authorization: Basic dGVzdDp0ZXN0" -H "client:aa" http://ip:端口/test
  • ​​​​​​​​​​​​​​​​​​​​​JWT传参
 curl -X POST -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" -H "Content-Type: application/json" -d '{"key1": "value1", "key2": "value2"}' https://example.com/api
  • Apikey 传参
curl -X POST -H "Authorization: Bearer my_api_key" -H "Content-Type: application/json" -d '{"key1": "value1", "key2": "value2"}' https://example.com/api
​​​​​​​
  • AKSK传参

要使用curl传入AK/SK参数,可以使用以下格式:

curl -X [请求方法] -H "Authorization: AWS4-HMAC-SHA256 Credential=[AccessKeyId]/[Date]/[Region]/[ServiceName]/aws4_request, SignedHeaders=[SignedHeaders], Signature=[Signature]" -H "Content-Type: application/json" -d '[参数数据]' [URL]

其中,[请求方法]可以是GET、POST等HTTP请求方法;[AccessKeyId]是AWS访问密钥ID;[Date]是请求的日期和时间;[Region]是AWS区域;[ServiceName]是AWS服务名称;[SignedHeaders]是签名头部列表;[Signature]是签名值;[参数数据]是传递给服务器的参数,通常以JSON格式表示;[URL]是请求的目标网址。

例如,要向https://example.com/api发送一个POST请求,并使用AK/SK认证和传递JSON格式的参数,可以使用以下命令:

curl -X POST -H "Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130810/us-east-1/servicename/aws4_request, SignedHeaders=host;x-amz-date, Signature=5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7" -H "Content-Type: application/json" -d '{"key1": "value1", "key2": "value2"}' https://example.com/api

请求方式

GET
curl -X GET http://example.com/resource
POST
curl -X POST -d "data=value" http://example.com/resource

JSON格式

curl -X POST -H "Content-Type: application/json"  -d '{"email":"web@myfreax.com","website":"myfreax.com"}' http://127.0.0.1:3000/site

请求头多个参数

curl -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_ACCESS_TOKEN" http://example.com/resource
PUT
curl -X PUT -T /path/to/file http://example.com/resourc
DELETE
curl -X DELETE http://example.com/resource

简单易用

从 Web 服务器获取主页:

curl https://www.example.com/

从 FTP 服务器获取 README 文件:

curl ftp://ftp.example.com/README

使用端口 8000 从服务器获取网页:

curl http://www.example.com:8000/

获取 FTP 站点的目录列表:

curl ftp://ftp.example.com/

从字典中获取所有匹配的术语 curl:

curl dict://dict.example.com/m:curl

从字典中获取 curl 的定义:

curl dict://dict.example.com/d:curl

一次获取两个文档:

curl ftp://ftp.example.com/ http://www.example.com:8000/

从FTPS服务器获取文件:

curl ftps://files.are.example.com/secrets.txt

或使用更合适的FTPS方式获取相同的文件:

curl --ftp-ssl ftp://files.are.example.com/secrets.txt

使用 SFTP 从 SSH 服务器获取文件:

curl -u username sftp://example.com/etc/issue

使用 SCP 从 SSH 服务器获取文件,使用私钥(不受密码保护)进行身份验证:

curl -u username: --key ~/.ssh/id_rsa scp://example.com/~/file.txt

使用 SCP 从 SSH 服务器获取文件,使用私钥(受密码保护)进行身份验证:

curl -u username: --key ~/.ssh/id_rsa --pass private_key_password
scp://example.com/~/file.txt

从 IPv6 Web 服务器获取主页:

curl "http://[2001:1890:1112:1::20]/"

从 SMB 服务器获取文件:

curl -u "domain\username:passwd" smb://server.example.com/share/file.txt

下载到文件

获取网页并存储在具有特定名称的本地文件中:

curl -o thatpage.html http://www.example.com/

获取网页并存储在本地文件中,使本地文件获取远程文档的名称(如果 URL 中未指定文件名部分,则此操作失败):

curl -O http://www.example.com/index.html

获取两个文件并使用其远程名称存储它们:

curl -O www.haxx.se/index.html -O curl.se/download.html

使用密码

FTP系统

要使用名称和密码的 ftp 文件,请将它们包含在 URL 中,例如:

curl ftp://name:passwd@ftp.server.example:port/full/path/to/file

或使用如下标志指定它们-u

curl -u name:passwd ftp://ftp.server.example:port/full/path/to/file

FTPS的

它就像FTP一样,但您可能还希望为证书等指定和使用特定于SSL的选项。

请注意,使用 as 前缀是标准中描述的隐式方式,而推荐的显式方式是通过 using 和 option 完成的。FTPS://FTP://--ssl-reqd

SFTP / SCP系列

这类似于 FTP,但您可以使用该选项来指定要使用的私钥而不是密码。请注意,私钥本身可能受到与远程系统登录密码无关的密码的保护;此密码是使用 Option 指定的。通常,curl 会自动从私钥文件中提取公钥,但在 curl 没有适当的库支持的情况下,必须使用该选项指定匹配的公钥文件。--key--pass--pubkey

HTTP的

Curl 还支持 HTTP URL 中的用户和密码,因此您可以选择如下文件:

curl http://name:passwd@http.server.example/full/path/to/file

或分别指定用户和密码,如

curl -u name:passwd http://http.server.example/full/path/to/file

HTTP 提供了许多不同的身份验证方法,curl 支持多种身份验证方法:Basic、Digest、NTLM 和 Negotiate (SPNEGO)。在不告诉使用哪种方法的情况下,curl 默认为 Basic。您还可以要求 curl 从服务器为给定 URL 接受的 URL 中挑选最安全的 URL,方法是使用 .--anyauth

注意!根据 URL 规范,HTTP URL 不能包含用户和密码,因此在通过代理使用 curl 时,即使 curl 在其他时候允许它,该样式也不起作用。使用代理时,必须使用用户和密码的样式。-u

HTTPS的

可能最常与私有证书一起使用,如下所述。

代理

curl 支持 HTTP 和 SOCKS 代理服务器,并提供可选身份验证。它没有对FTP代理服务器的特殊支持,因为没有这些标准,但它仍然可以与其中许多服务器一起使用。您还可以使用 HTTP 和 SOCKS 代理将文件传输到 FTP 服务器或从 FTP 服务器传输文件。

使用使用端口 888 的名为 my-proxy 的 HTTP 代理获取 ftp 文件:

curl -x my-proxy:888 ftp://ftp.example.com/README

使用与上述相同的代理从需要用户和密码的 HTTP 服务器获取文件:

curl -u user:passwd -x my-proxy:888 http://www.example.com/

某些代理需要特殊身份验证。使用 -U 指定,如上所述:

curl -U user:passwd -x my-proxy:888 http://www.example.com/

不使用代理的主机和域的逗号分隔列表可以指定为:

curl --noproxy example.com -x my-proxy:888 http://www.example.com/

如果代理指定为 instead of or ,则 curl 使用 HTTP/1.0 而不是 HTTP/1.1 进行任何尝试。--proxy1.0--proxy-xCONNECT

curl 还支持带有 和 的 SOCKS4 和 SOCKS5 代理。--socks4--socks5

另请参阅 Curl 支持的环境变量,这些变量提供了进一步的代理控制。

大多数 FTP 代理服务器都设置为从客户端的角度显示为普通 FTP 服务器,并使用特殊命令来选择远程 FTP 服务器。curl 支持 和 选项,可用于通过许多 FTP 代理设置传输。例如,可以使用Blue Coat FTP代理将文件上传到远程FTP服务器,并带有以下选项:-u-Q--ftp-account

curl -u "username@ftp.server.example Proxy-Username:Remote-Pass"
  --ftp-account Proxy-Password --upload-file local-file
  ftp://my-ftp.proxy.example:21/remote/upload/path/

请参阅 FTP 代理的手册,以确定它希望设置传输的形式,以及 curl 的选项,以准确查看 curl 发送的内容。-v

管道

获取密钥文件并添加它(在用于包管理的系统上时):apt-keyapt

curl -L https://apt.example.org/llvm-snapshot.gpg.key | sudo apt-key add -

“|”通过管道将输出传递到 STDIN。 告知应从 STDIN 读取密钥文件。-apt-key

范围

HTTP 1.1 引入了字节范围。使用此功能,客户端可以请求仅获取指定文档的一个或多个子部分。Curl 用标志支持这一点。-r

获取文档的前 100 个字节:

curl -r 0-99 http://www.example.com/

获取文档的最后 500 个字节:

curl -r -500 http://www.example.com/

Curl 还支持 FTP 文件的简单范围。然后,您只能指定开始和停止位置。

使用 FTP 获取文档的前 100 个字节:

curl -r 0-99 ftp://www.example.com/README

上传

FTP / FTPS / SFTP / SCP

将 stdin 上的所有数据上传到指定的服务器:

curl -T - ftp://ftp.example.com/myfile

从指定文件上传数据,使用用户和密码登录:

curl -T uploadfile -u user:passwd ftp://ftp.example.com/myfile

将本地文件上传到远程站点,并在远程站点上使用本地文件名:

curl -T uploadfile -u user:passwd ftp://ftp.example.com/

上传本地文件以附加到远程文件:

curl -T localfile -a ftp://ftp.example.com/remotefile

Curl 还支持通过代理进行 ftp 上传,但前提是代理配置为允许这种隧道。如果是这样,您可以以类似于以下方式运行 curl:

curl --proxytunnel -x proxy:port -T localfile ftp.example.com

中小型企业/中小型企业

curl -T file.txt -u "domain\username:passwd"
  smb://server.example.com/share/

HTTP的

将 stdin 上的所有数据上传到指定的 HTTP 站点:

curl -T - http://www.example.com/myfile

请注意,必须先将 HTTP 服务器配置为接受 PUT,然后才能成功执行此操作。

有关执行 HTTP 数据上传的其他方法,请参阅下面的 POST 部分。

详细/调试

如果 curl 在不应该出现的地方失败,如果服务器不让你进入,如果你无法理解响应:使用标志来获取详细内容。Curl 输出大量信息以及它发送和接收的内容,以便让用户看到所有客户端与服务器的交互(但它不会显示实际数据)。-v

curl -v ftp://ftp.example.com/

要获取有关 curl 功能的更多详细信息和信息,请尝试使用具有给定文件名的 or 选项进行登录,如下所示:--trace--trace-ascii

curl --trace trace.txt www.haxx.se

详细信息

不同的协议提供了获取有关特定文件/文档的详细信息的不同方法。要让 curl 显示有关单个文件的详细信息,您应该使用 / 选项。它显示 HTTP 和 FTP 单个文件上的所有可用信息。HTTP信息要广泛得多。-I--head

对于 HTTP,您可以使用 / 获取数据之前显示的标头信息(与显示的信息相同)。Curl 在从 FTP 和 HTTP 获取文件时理解 / 选项,然后将标头存储在指定的文件中。-I-i--include-D--dump-header

将 HTTP 标头存储在单独的文件中(headers.txt示例中):

  curl --dump-header headers.txt curl.se

请注意,如果您希望 curl 使用服务器发送的 cookie,则存储在单独文件中的标头在以后可能很有用。有关此内容的更多信息,请参阅 cookie 部分。

开机自检 (HTTP)

使用 curl 发布数据很容易。这是使用选项完成的。帖子数据必须经过紧急编码。-d <data>

发布一个简单的留言簿。namephone

curl -d "name=Rafael%20Sagula&phone=3320780" http://www.example.com/guest.cgi

或者自动对数据进行 URL 编码

curl --data-urlencode "name=Rafael Sagula&phone=3320780" http://www.example.com/guest.cgi

如何使用 curl 发布表单,课程 #1:

挖出要填写的表单中的所有标签。<input>

如果有正常的帖子,您习惯于发帖。 采用完整的帖子字符串,其格式为-d-d

<variable1>=<data1>&<variable2>=<data2>&...

变量名称是在标记中设置的名称,数据是要为输入填写的内容。数据必须正确进行 URL 编码。这意味着你用 + 替换空格,并且你用奇怪的字母替换奇怪的字母,其中字母的 ASCII 代码的十六进制表示形式。"name="<input>%XXXX

例:

(说如果有以下 HTML)http://example.com

<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#093754"><span style="color:#ffffff"><code><form action="post.cgi" method="post">
  <input name=user size=10>
  <input name=pass type=password size=10>
  <input name=id type=hidden value="blablabla">
  <input name=ding value="submit">
</form></code></span></span></span></span>

我们想输入带有密码的用户。foobar12345

要发布到此内容,您需要输入一个 curl 命令行,例如:

curl -d "user=foobar&pass=12345&id=blablabla&ding=submit" http://example.com/post.cgi

虽然使用 application/x-www-form-urlencoded mime 类型(通常由 CGI 和类似机构理解),但 curl 还支持功能更强大的 multipart/form-data 类型。后一种类型支持文件上传等功能。-d

-F接受 .如果要从文件中读取内容,请用作内容。指定文件时,还可以通过追加到文件名来指定文件内容类型。您还可以在一个字段中发布多个文件的内容。例如,字段名称用于发送三个文件,这些文件具有不同的内容类型,使用以下语法:-F "name=contents"@filename;type=<mime type>coolfiles

curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html"
  http://www.example.com/postit.cgi

如果未指定 content-type,curl 会尝试从文件扩展名中猜测(它只知道几个),或者使用以前指定的类型(如果在列表中指定了多个文件,则从较早的文件中猜测),或者使用默认类型。application/octet-stream

使用 模拟填写表单。假设您在表单中填写了三个字段。一个字段是要发布的文件名,一个字段是您的姓名,一个字段是文件描述。我们想发布我们编写的名为 .要让 curl 而不是您最喜欢的浏览器发布此数据,您必须阅读表单页面的 HTML 源代码并找到输入字段的名称。在我们的示例中,输入字段名称为 和 。-Fcooltext.txtfileyournamefiledescription

curl -F "file=@cooltext.txt" -F "yourname=Daniel"
  -F "filedescription=Cool text file with cool text inside"
  http://www.example.com/postit.cgi

要在一个帖子中发送两个文件,您可以通过两种方式进行:

使用单个字段名称在单个字段中发送多个文件:

curl -F "pictures=@dog.gif,cat.gif" $URL

发送两个具有两个字段名称的字段

curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif" $URL

要从字面上发送字段值而不解释前导 或 ,或嵌入式 ,请使用 代替 。当从用户或其他不可预测的来源获取值时,建议这样做。在这些情况下,使用 instead of 可能会允许用户欺骗 curl 上传文件。@<;type=--form-string-F-F--form-string

引荐

HTTP 请求可以选择包含有关哪个地址将其引用到实际页面的信息。curl 允许您指定要在命令行上使用的反向链接。愚弄或欺骗愚蠢的服务器或 CGI 脚本特别有用,这些服务器或 CGI 脚本依赖于该信息可用或包含某些数据。

curl -e www.example.org http://www.example.com/

用户代理

HTTP 请求可以选择包含有关生成请求的浏览器的信息。Curl 允许在命令行上指定它。愚弄或欺骗愚蠢的服务器或只接受某些浏览器的 CGI 脚本特别有用。

例:

curl -A 'Mozilla/3.0 (Win95; I)' http://www.bank.example.com/

Other common strings:

  • Mozilla/3.0 (Win95; I) - Netscape Version 3 for Windows 95
  • Mozilla/3.04 (Win95; U) - Netscape Version 3 for Windows 95
  • Mozilla/2.02 (OS/2; U) - Netscape Version 2 for OS/2
  • Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav) - Netscape for AIX
  • Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586) - Netscape for Linux

Note that Internet Explorer tries hard to be compatible in every way:

  • Mozilla/4.0 (compatible; MSIE 4.01; Windows 95) - MSIE for W95

Mozilla is not the only possible User-Agent name:

  • Konqueror/1.0 - KDE File Manager desktop client
  • Lynx/2.7.1 libwww-FM/2.14 - Lynx command line browser

饼干

Cookie通常由Web服务器用于将状态信息保存在客户端。服务器通过在标头中发送响应行来设置 cookie,该响应行类似于数据部分通常包含一组对(用分号分隔,如 )。服务器还可以指定 cookie 应该用于哪个路径(通过指定 )、cookie 何时过期 ()、用于哪个域 () 以及它是否应该只用于安全连接 ()。Set-Cookie: <data>NAME=VALUE;NAME1=VALUE1; NAME2=VALUE2;path=valueexpire=DATEdomain=NAMEsecure

如果您从服务器收到包含标题的页面,例如:

<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#093754"><span style="color:#ffffff"><code>Set-Cookie: sessionid=boo123; path="/foo";
</code></span></span></span></span>

这意味着当我们在以 开头的路径中获得任何内容时,服务器希望传递第一对。/foo

例如,获取一个希望在 cookie 中传递我的名字的页面:

curl -b "name=Daniel" www.example.com

Curl 还能够在后续会话中使用之前收到的 cookie。如果您从服务器获取 Cookie 并以类似于以下方式将其存储在文件中:

curl --dump-header headers www.example.com

...然后,您可以在第二个连接到该(或其他)站点时,使用文件中的 cookie,例如:headers.txt

curl -b headers.txt www.example.com

虽然将标头保存到文件是存储 cookie 的一种有效方法,但它容易出错,并且不是执行此操作的首选方法。相反,使用众所周知的 Netscape cookie 格式使 curl 保存传入的 cookie,如下所示:

curl -c cookies.txt www.example.com

请注意,通过指定,您可以启用 cookie 引擎,并且可以使 curl 遵循 a(通常与 cookie 结合使用)。如果网站发送 Cookie 和位置字段,您可以使用不存在的文件来触发 Cookie 感知,例如:-b-Llocation:

curl -L -b empty.txt www.example.com

要从中读取 cookie 的文件必须使用纯 HTTP 标头或作为 Netscape 的 cookie 文件进行格式化。Curl 根据文件内容确定它的类型。在上面的命令中,curl 解析标头并存储从 www.example.com 接收的 cookie。curl 将与请求匹配的存储 cookie 发送到服务器,因为它遵循该位置。该文件可能是不存在的文件。empty.txt

要从 Netscape Cookie 文件中读取和写入 Cookie,您可以同时设置并使用同一文件:-b-c

curl -b cookies.txt -c cookies.txt www.example.com

进度表

进度计的存在是为了向用户显示某些事情确实正在发生。输出中的不同字段具有以下含义:

% Total    % Received % Xferd  Average Speed          Time             Curr.
                               Dload  Upload Total    Current  Left    Speed
0  151M    0 38608    0     0   9406      0  4:41:43  0:00:04  4:41:39  9287

从左到右:

  • %- 整个转移完成的百分比
  • Total- 整个预期转移的总规模
  • %- 下载完成的百分比
  • Received- 当前下载的字节数
  • %- 上传完成的百分比
  • Xferd- 当前上传的字节数
  • Average Speed Dload- 下载的平均传输速度
  • Average Speed Upload- 上传的平均传输速度
  • Time Total- 完成手术的预期时间
  • Time Current- 自调用以来经过的时间
  • Time Left- 预计完成时间
  • Curr.Speed- 最后 5 秒的平均传输速度(当然,传输的前 5 秒是基于更短的时间。

该选项显示一个完全不同的进度条,不需要太多解释!-#

速度限制

Curl 允许用户设置传输速度条件,这些条件必须满足才能让传输继续进行。通过使用交换机,如果传输速度在指定时间内低于指定的最低限制,则可以进行 curl 中止传输。-y-Y

要让 curl 在速度低于 3000 字节/秒 1 分钟时中止下载,请运行:

curl -Y 3000 -y 60 www.far-away.example.com

这可以与整体时间限制结合使用,因此上述操作必须在 30 分钟内全部完成:

curl -m 1800 -Y 3000 -y 60 www.far-away.example.com

强制 curl 传输数据的速度不超过给定速率也是可能的,如果您使用的是有限的带宽连接,并且不希望传输使用所有带宽连接(有时称为带宽限制),这可能很有用。

使 curl 传输数据速度不超过每秒 10 KB:

curl --limit-rate 10K www.far-away.example.com

curl --limit-rate 10240 www.far-away.example.com

或者防止 curl 上传数据的速度超过每秒 1 兆字节:

curl -T upload --limit-rate 1M ftp://uploads.example.com

使用该选项时,传输速率按秒调节,这会导致总传输速度低于给定数字。当然,如果您的转移在月经期间停滞不前,有时当然会大大降低。--limit-rate

配置文件

Curl 会在启动时自动尝试从用户的主目录中读取文件(或 Microsoft Windows 系统上的文件)。.curlrc_curlrc

配置文件可以使用普通的命令行开关组成,但您也可以指定不带破折号的长选项,以使其更具可读性。您可以用空格分隔选项和参数,也可以用 或 分隔。可以在文件中使用注释。如果一行的第一个字母是 -symbol,则该行的其余部分将被视为注释。=:#

如果希望参数包含空格,则必须将整个参数括在双引号 () 中。在这些引号中,将引号指定为 。"\"

注意:您必须在同一行上指定选项及其参数。

示例,在配置文件中设置默认超时和代理:

# We want a 30 minute timeout:
-m 1800
#. .. and we use a proxy for all accesses:
proxy = proxy.our.domain.com:8080

行尾的空格很重要,但每行第一个字符之前的所有空格都将被忽略。

通过使用 -q 作为第一个命令行参数来防止 curl 读取默认文件,例如:

curl -q www.example.org

强制 curl 获取并显示本地帮助页面,以防在没有 URL 的情况下调用它,方法是制作类似于以下内容的配置文件:

# default url to get
url = "http://help.with.curl.example.com/curlhelp.html"

您可以使用 / 标志指定要读取的另一个配置文件。如果将 config filename 设置为它,则会从 stdin 读取配置,如果您想隐藏选项在进程表等中不可见,这会很方便:-K--config-

echo "user = user:passwd" | curl -K - http://that.secret.example.com

额外的标头

在您自己的程序中使用 curl 时,您最终可能需要在获取网页时传递自己的自定义标头。您可以使用标志来执行此操作。-H

示例,在获取页面时将标头发送到服务器:X-you-and-me: yes

curl -H "X-you-and-me: yes" love.example.com

如果您希望 curl 在标题中发送与平时不同的文本,这也很有用。然后,您指定的标头将替换通常发送的标头 curl。如果将内部标头替换为空标头,则会阻止发送该标头。要防止使用标头,请执行以下操作:-HHost:

curl -H "Host:" server.example.com

FTP 和路径名

请注意,在获取带有 URL 的文件时,给定的路径是相对于您输入的目录的。要从 ftp 站点的主目录中获取文件,请执行以下操作:ftp://README

curl ftp://user:passwd@my.example.com/README

如果需要同一站点的根目录中的自述文件,则需要指定绝对文件名:

curl ftp://user:passwd@my.example.com//README

(即在文件名前面加一个斜杠。

SFTP 和 SCP 以及路径名

使用 sftp: 和 scp: URL,给定的路径名是服务器上的绝对名称。要访问相对于远程用户主目录的文件,请在文件前加上 的前缀,例如:/~/

curl -u $USER sftp://home.example.com/~/.bashrc

FTP 和防火墙

FTP 协议要求相关方之一在数据即将传输时立即打开第二个连接。有两种方法可以做到这一点。

curl 的默认方式是发出 PASV 命令,这会导致服务器打开另一个端口并等待客户端执行的另一个连接。如果客户端位于不允许传入连接的防火墙后面,这很好。

curl ftp.example.com

例如,如果服务器位于防火墙后面,该防火墙不允许在 21 以外的端口上进行连接(或者如果它不支持该命令),则另一种方法是使用该命令并指示服务器连接到给定 IP 号和端口上的客户端(作为 PORT 命令的参数)。PASVPORT

curl 的标志支持几个不同的选项。您的机器可能有多个 IP 地址和/或网络接口,curl 允许您选择要使用的 IP 地址和/或网络接口。也可以使用默认地址:-P

curl -P - ftp.example.com

使用我们接口的 IP 地址下载但使用(这在 Windows 上不起作用):PORTle0

curl -P le0 ftp.example.com

下载时,请使用 192.168.0.10 作为我们的 IP 地址以使用:PORT

curl -P 192.168.0.10 ftp.example.com

网络接口

使用接口的指定端口从服务器获取网页:

curl --interface eth0:1 http://www.example.com/

curl --interface 192.168.1.10 http://www.example.com/

HTTPS的

安全 HTTP 要求在构建 curl 时安装和使用 TLS 库。如果这样做,curl 就能够使用 HTTPS 协议检索和发布文档。

例:

curl https://secure.example.com

curl 还能够使用客户端证书从需要有效证书的站点获取/发布文件。唯一的缺点是证书需要采用 PEM 格式。PEM 是一种用于存储证书的标准开放格式,但最常用的浏览器不使用它。如果你想让 curl 使用你喜欢的浏览器使用的证书,你可能需要下载/编译一个转换器,可以将浏览器的格式化证书转换为 PEM 格式的证书。

有关如何使用带有个人密码的证书自动检索文档的示例:

curl -E /path/to/cert.pem:password https://secure.example.com/

如果忽略在命令行上指定密码,则在接收任何数据之前,系统会提示您输入正确的密码。

许多较旧的HTTPS服务器在特定的SSL或TLS版本上存在问题,而较新版本的OpenSSL等使用这些版本,因此有时指定TLS版本curl应该使用什么是有用的。

curl --tlv1.0 https://secure.example.com/

否则,curl 会尝试使用合理的 TLS 默认版本。

恢复文件传输

为了在之前中止的地方继续文件传输,curl 支持在 HTTP(S) 下载以及 FTP 上传和下载时恢复。

继续下载文档:

curl -C - -o file ftp://ftp.example.com/path/file

继续上传文档:

curl -C - -T file ftp://ftp.example.com/path/file

继续从 Web 服务器下载文档

curl -C - -o file http://www.example.com/

时间条件

HTTP 允许客户端为其请求的文档指定时间条件。它是 或 .curl 允许您使用 / 标志指定它们。If-Modified-SinceIf-Unmodified-Since-z--time-cond

例如,您可以轻松地进行下载,仅当远程文件比本地副本新时才执行。它的制作方式如下:

curl -z local.html http://remote.example.com/remote.html

或者,仅当本地文件比远程文件新时,才能下载文件。为此,在日期字符串前面加上 ,如下所示:-

curl -z -local.html http://remote.example.com/remote.html

您可以指定纯文本日期作为条件。告诉 curl 仅下载自 2012 年 1 月 12 日以来更新的文件:

curl -z "Jan 12 2012" http://remote.example.com/remote.html

curl 接受多种日期格式。您总是通过在日期前面加上破折号 () 来检查日期。-

词典

为了好玩,试试

curl dict://dict.org/m:curl
curl dict://dict.org/d:heisenbug:jargon
curl dict://dict.org/d:daniel:gcide

are 和 的别名以及 are 和 的别名。例如mmatchfindddefinelookup

curl dict://dict.org/find:curl

破坏 RFC(但不是 DICT 协议)的 URL 描述的命令是

curl dict://dict.org/show:db
curl dict://dict.org/show:strat

仍然缺少身份验证支持

LDAP的

如果您已经安装了 OpenLDAP 库,curl 可以利用它并提供支持。在 Windows 上,curl 默认使用平台 SDK 中的 WinLDAP。ldap://

curl 使用的默认协议版本是 LDAP 版本 3。版本 2 用作版本 3 无法连接时的回退机制。

LDAP是一件复杂的事情,编写LDAP查询并非易事。熟悉其他地方的确切语法描述。其中一个地方可能是:RFC 2255,LDAP URL 格式

举个例子,这是如何从电子邮件地址中具有特定子域的LDAP服务器获取所有人的方法:

curl -B "ldap://ldap.example.com/o=frontec??sub?mail=*sth.example.com"

您还可以在访问 LDAP 目录时使用身份验证:

curl -u user:passwd "ldap://ldap.example.com/o=frontec??sub?mail=*"
curl "ldap://user:passwd@ldap.example.com/o=frontec??sub?mail=*"

默认情况下,如果提供了用户和密码,则 OpenLDAP/WinLDAP 使用基本身份验证。在 Windows 上,您可以通过在 curl 命令行中提供 或 选项之一来控制此行为--basic--ntlm--digest

curl --ntlm "ldap://user:passwd@ldap.example.com/o=frontec??sub?mail=*"

在 Windows 上,如果未指定用户/密码,那么自动协商机制将用于当前登录凭证 (SSPI/SPNEGO)。

环境变量

Curl 读取并理解以下环境变量:

http_proxy, HTTPS_PROXY, FTP_PROXY

应为特定于协议的代理设置它们。一般代理应设置为

ALL_PROXY

设置了不应通过任何代理的逗号分隔主机名列表(仅使用星号,匹配所有主机)*

NO_PROXY

如果主机名与其中一个字符串匹配,或者主机位于其中一个字符串的域中,则不会通过代理与该节点进行事务处理。使用域时,它需要以句点开头。用户可以通过设置为 来指定 www.example.com 和 foo.example.com 都不应使用代理。通过包含全名,您可以排除特定的主机名,因此要不使用代理,但仍要这样做,请设置为 。NO_PROXY.example.comwww.example.comfoo.example.comNO_PROXYwww.example.com

使用 / 标志会覆盖环境变量。-x--proxy

网络rc

Unix很久以前就引入了这个概念。这是用户在文件中为经常访问的 FTP 站点指定名称和密码的一种方式,这样您就不必在每次访问这些站点时都键入它们。你意识到,如果别人掌握了你的密码,这是一个很大的安全风险,因此大多数Unix程序不会读取这个文件,除非它只有你自己可以读(curl不在乎)。.netrc

如果被告知,Curl 支持文件(使用 / 和 选项)。这不仅限于 FTP,因此 curl 可以将其用于使用身份验证的所有协议。.netrc-n--netrc--netrc-optional

一个简单的文件可能如下所示:.netrc

machine curl.se login iamdaniel password mysecret

自定义输出

为了让脚本程序员更好地了解 curl 的进度,引入了 / 选项。使用它,您可以指定要从上一次传输中提取哪些信息。-w--write-out

要显示下载的字节数以及一些文本和结束换行符,请执行以下操作:

curl -w 'We downloaded %{size_download} bytes\n' www.example.com

Kerberos FTP 传输

Curl 支持 kerberos4 和 kerberos5/GSSAPI 进行 FTP 传输。您需要在 curl 构建时安装并使用 kerberos 包才能使用它。

首先,以正常方式获取 krb-ticket,就像使用 / 工具一样。然后以类似于以下方式使用 curl:kinitkauth

curl --krb private ftp://krb4site.example.com -u username:fakepwd

交换机上的密码没有用处,但空白的密码会使 curl 要求输入密码,并且您已经在 / 中输入了真实密码。-ukinitkauth

TELNET网络

curl telnet 支持是基本且易于使用的。Curl 将 stdin 上传递给它的所有数据传递到远程服务器。使用类似于以下内容的命令行连接到远程 telnet 服务器:

curl telnet://remote.example.com

输入要传递给 stdin 上的服务器的数据。结果将发送到 stdout 或您指定的文件。-o

您可能希望 / 选项关闭慢速连接或类似连接的缓冲输出。-N--no-buffer

使用选项将选项传递给 telnet 协议协商。要告诉服务器我们使用 vt100 终端,请尝试以下操作:-t

curl -tTTYPE=vt100 telnet://remote.example.com

其他有趣的选项包括:-t

  • XDISPLOC=<X display>设置 X 显示位置。
  • NEW_ENV=<var,val>设置环境变量。

注意:telnet 协议没有指定使用指定用户和密码登录的任何方式,因此 curl 无法自动执行此操作。为此,您需要跟踪何时收到登录提示并相应地发送用户名和密码。

持久连接

在单个命令行上指定多个文件,使 curl 按指定顺序一个接一个地传输所有文件。

libcurl 尝试使用持久连接进行传输,以便第二次传输到同一主机时可以使用已启动且在上一次传输中保持打开状态的相同连接。这大大减少了除第一次传输之外的所有传输的连接时间,并且可以更好地利用网络。

请注意,curl 不能将持久连接用于后续 curl 调用中使用的传输。如果它们使用同一主机,请尝试在同一命令行上填充尽可能多的 URL,因为这会使传输更快。如果使用 HTTP 代理进行文件传输,则几乎所有传输都是持久的。

使用单个命令行进行多次传输

如上所述,您只需添加更多 URL,即可使用一个命令行下载多个文件。如果您希望这些内容保存到本地文件,而不仅仅是打印到 stdout,则需要为指定的每个 URL 添加一个保存选项。请注意,这也适用于该选项(但不是)。-O--remote-name-all

例如:获取两个文件并用于第一个文件,第二个文件使用自定义文件名:-O

curl -O http://example.com/file.txt ftp://example.com/moo.exe -o moo.jpg

您还可以以类似的方式上传多个文件:

curl -T local1 ftp://example.com/moo.exe -T local2 ftp://example.com/moo2.txt

IPv6的

当主机查找返回 IPv6 地址时,curl 连接到具有 IPv6 的服务器,如果连接失败,则回退到 IPv4。和 选项可以指定当两者都可用时要使用的地址。IPv6 地址也可以使用以下语法直接在 URL 中指定:--ipv4--ipv6

http://[2001:1890:1112:1::20]/overview.html

使用此样式时,必须提供该选项以阻止 curl 将方括号解释为特殊的通配字符。也可以使用链接本地和站点本地地址(包括范围标识符,如 ),但范围部分必须是数字或与 Linux 上的现有网络接口匹配,并且百分比字符必须是 URL 转义。SFTP URL 中的上一个示例可能如下所示:-gfe80::1234%1

sftp://[fe80::1234%251]/

在 URL 中提供的 IPv6 地址(例如,到 或选项)不应进行 URL 编码。--proxy--interface--ftp-port

邮件列表

为了方便起见,我们有几个开放的邮件列表来讨论 curl、它的发展以及与此相关的内容。在 curl - Mailing lists 获取所有信息。

请将卷曲问题、功能请求和故障报告直接发送到这些邮件列表之一,而不是邮寄给任何个人。

可用列表包括:

curl-users

命令行工具的用户。如何使用它,什么不起作用,新功能,相关工具,问题,新闻,安装,编译,运行,移植等。

curl-library

使用或开发 libcurl 的开发人员。错误、扩展、改进。

curl-announce

低流量。仅接收新公共版本的公告。在最坏的情况下,每月大约会收到一到两封邮件,但通常每两个月只有一封邮件。

curl-and-php

在 PHP 中使用 curl 函数。一切都以 PHP 角度卷曲。或具有卷曲角度的 PHP。

curl-and-python

Python 黑客使用带有或不带有 python 绑定 pycurl 的 curl。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: curl c example\ 是一个使用curl命令行工具的示例。curl是一个功能强大的用于与服务器进行通信的工具,支持多种协议,包括HTTP、FTP、TELNET等。 在这个示例中,c是curl命令的参数之一,它用来指定curl发送请求时使用的HTTP方法。c后面的example\是一个URL,用来指定要发送请求的目标服务器的地址。 例如,如果我们运行curl c example.com,那么curl将使用GET方法发送请求到example.com服务器,并返回服务器的响应。 除了c参数,curl还提供了许多其他参数,可以用来定制请求的行为。例如,可以使用-d参数来指定要发送的数据,使用-H参数来自定义请求头,使用-o参数来将服务器的响应保存到一个文件中等等。 在实际使用中,我们可以根据需要构建不同的curl命令,来实现各种不同的功能,如获取网页内容、上传文件、下载文件等等。 总之,curl c example\是一个使用curl的示例,通过它我们可以学习和理解如何使用curl命令行工具来进行网络通信。 ### 回答2: curl是一种用于与服务器进行通信的命令行工具。它是基于网络传输协议进行数据传输的工具之一。使用curl命令可以通过HTTP、HTTPS、FTP、SMTP等协议发送请求并获取响应。 在上述问题中,curl c example\ 是一个curl命令的示例。其中,c是curl命令的一个选项,用来指定请求的方式为POST。example则是请求的目标URL,\是转义字符,用于处理目标URL中可能存在的特殊字符。 这个命令的含义是使用POST方式向example发送请求。具体而言,curl将会将请求发送到example所表示的服务器,并期望获得服务器返回的响应。 需要注意的是,例子中使用了转义字符\来处理URL中可能的特殊字符,这是为了确保URL的正确解析,从而保证请求能够成功发送到目标服务器。 总结curl命令是一种用于与服务器进行通信的命令行工具,可以通过不同的协议发送请求并获取响应。在上述问题中,curl c example\表示使用POST方式向example发送请求,并借助转义字符\处理目标URL中的特殊字符。 ### 回答3: curl是一个命令行工具,用于发送HTTP请求并显示响应。c是curl的一个选项,用于指定要发送请求的HTTP方法。example是示例的名称,而\则是转义字符,用于对后面的字符进行转义。由于在命令行中使用curl时,空格通常用于分隔不同的参数和选项,因此使用转义字符\来转义空格,以确保正确解析整个参数。因此,"curl c example\"的意思是使用curl发送一个HTTP请求,使用c选项指定HTTP方法,并将请求发送到示例的URL地址上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值