跳到主要内容

2、curl

curl命令

image-20231016062113861

目录

[toc]

1、命令用途

curl字符界面浏览器。

​ 另一个可以用来进行文件传输的工具是 curl,它是对 libcurl 库的一个命令行工具包装。libcurl 库中提供了相应功能的 API,可以在程序中调用。对于 libcurl 库的使用方法介绍超出了本文的讨论范围。curl 使用 URL 的语法来传输文件,它支持 FTP, FTPS, HTTP, HTTPS, TFTP, SFTP, TELNET 等多种协议。curl 功能强大,它提供了包括代理支持,用户认证,FTP 上载,HTTP post,SSL 连接,文件续传等许多特性。

2、基本语法

curl [options … ] <url>

其中下载参数大约有 80 多个,curl 的各个功能完全依靠这些参数来完成。下面举例说明 curl 的一些基本用法。

3、参数含义

-I/—head 只显示请求头信息

4、使用案例

范例:执行远程服务器上的脚本

curl -sSfL https://raw.githubusercontent.com/longhorn/longhorn/v1.2.3/scripts/environment_check.sh | bash
daemonset.apps/longhorn-environment-check created
waiting for pods to become ready (0/2)
waiting for pods to become ready (0/2)
all pods ready (2/2)

MountPropagation is enabled!

cleaning up...
daemonset.apps "longhorn-environment-check" deleted
clean up complete
-f, --fail Fail silently (no output at all) on HTTP errors (H)
-L, --location Follow redirects (H)
--location-trusted like --location and send auth to other hosts (H)
-S, --show-error Show error. With -s, make curl show errors when they occur
-s, --silent Silent mode. Don't output anything

或者:

curl -L https://istio.io/downloadIstio | sh -

范例:-v -H参数

curl -v http://172.29.9.51 -H 'Host: ngdemo.qikqiak.com'

-v, --verbose Make the operation more talkative #使操作更健谈
-H, --header LINE Custom header to pass to server (H) #自定义头传递给服务器
#查看pod和ingress
[root@master1 ingress]#kubectl get ingress my-nginx
NAME CLASS HOSTS ADDRESS PORTS AGE
my-nginx nginx ngdemo.qikqiak.com 172.29.9.51 80 23h
[root@master1 ingress]#kubectl get po -l app=my-nginx
NAME READY STATUS RESTARTS AGE
my-nginx-7c4ff94949-lwvjf 1/1 Running 0 23h

#验证ingress应用
[root@master1 ingress]#curl -v http://172.29.9.51 -H 'Host: ngdemo.qikqiak.com' #注意下这个命令的用法
* About to connect() to 172.29.9.51 port 80 (#0)
* Trying 172.29.9.51...
* Connected to 172.29.9.51 (172.29.9.51) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Accept: */*
> Host: ngdemo.qikqiak.com
>
< HTTP/1.1 200 OK
< Date: Mon, 03 Jan 2022 08:51:03 GMT
< Content-Type: text/html
< Content-Length: 615
< Connection: keep-alive
< Last-Modified: Tue, 28 Dec 2021 15:28:38 GMT
< ETag: "61cb2d26-267"
< Accept-Ranges: bytes
<
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
* Connection #0 to host 172.29.9.51 left intact

#或者在浏览器里测试

范例:curl ip

[root@master1 ~]#kubectl get svc -l app=my-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx ClusterIP 10.110.207.185 <none> 80/TCP 25h

[root@master1 ~]#curl 10.110.207.185
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master1 ~]#

范例:-L -o选项 重定向

curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
cp docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

#测试命令
docker-compose
Define and run multi-container applications with Docker.

Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help

或者不加-o直接使用重定向:

img

案例:

使用 curl 命令的时候添加了一个 -L 标志,该标志指示 curl 将遵循重定向。

$ kubectl exec "${SOURCE_POD}" -c sleep -- curl -sSL -o /dev/null -D - http://edition.cnn.com/politics
# 输出如下结果
HTTP/1.1 301 Moved Permanently
# ......
location: https://edition.cnn.com/politics

HTTP/2 200
content-type: text/html; charset=utf-8
# ......

📌 案例:docker-compose安装

curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#添加执行权限
chmod +x /usr/local/bin/docker-compose

范例:-I/—head 只显示请求头信息

-I/—head 只显示请求头信息

-I, --head
(HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature the command HEAD which this uses
to get nothing but the header of a document. When used on an FTP or FILE file, curl displays the
file size and last modification time only.

[root@k8s-master ~]#curl -I 10.104.197.77:80 #这个10.104.197.77:80 通过
HTTP/1.1 200 OK
Server: nginx/1.21.0
Date: Sat, 26 Jun 2021 09:02:37 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 25 May 2021 12:28:56 GMT
Connection: keep-alive
ETag: "60aced88-264"
Accept-Ranges: bytes

[root@k8s-master ~]#curl --head 10.104.197.77:80
HTTP/1.1 200 OK
Server: nginx/1.21.0
Date: Sat, 26 Jun 2021 09:02:43 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 25 May 2021 12:28:56 GMT
Connection: keep-alive
ETag: "60aced88-264"
Accept-Ranges: bytes

排错:--data-raw 选项报错(已解决) curl发送post数据

  • gpt问答:2023年11月2日

问题:

报错提示

[root@docker 4.envoy]#curl --location --request POST 'http://localhost:8080/endpoints' \

--header 'Content-Type: application/json'

--data-raw '{
"address": "172.17.0.7",
"port_value": 8081
}'
curl: option --data-raw: is unknown
curl: try 'curl --help' or 'curl --manual' for more information

回答:

错误提示表明 --data-raw 选项是未知的。在较早版本的 curl 中,--data-raw 选项可能不可用。你可以尝试使用替代的方法来发送 JSON 数据。以下是一种常见的方法:

curl --location --request POST 'http://localhost:8080/endpoints' \
--header 'Content-Type: application/json' \
--data '{"address": "172.17.0.7", "port_value": 8081}'

上述命令使用 --data 选项,后跟一个合法的 JSON 字符串。这将向指定的端点发送 JSON 数据。确保你的 curl 版本支持这种方式。如果你的 curl 版本依然不支持,请尝试升级 curl 到较新的版本。

经测试正常:

[root@docker 4.envoy]#curl --location --request POST 'http://localhost:8080/endpoints' \
> --header 'Content-Type: application/json' \
> --data '{
> "address": "172.17.0.7",
> "port_value": 8081
> }'
{
"id": "db8feebe-212e-4161-b5b5-d38217aa3afc"
}
[root@docker 4.envoy]#

案例:curl如何测试https证书来源极其是否是安全的?

使用 curl 命令可以测试 HTTPS 证书的来源以及验证其是否安全。以下是一些方法和选项,你可以通过这些方法来检查 HTTPS 证书的详细信息:

查看证书信息

使用 -v--verbose 选项可以查看详细的连接过程,包括证书信息。

curl -v https://example.com

在输出信息中,你可以找到类似如下的信息:

* Server certificate:
* subject: CN=example.com
* start date: Aug 1 00:00:00 2023 GMT
* expire date: Jul 31 23:59:59 2024 GMT
* subjectAltName: host "example.com" matched cert's "example.com"
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.

curl -v https://onedayxyy.cn

image-20240806201119171

查看详细证书信息

使用 --cert-info 选项可以获取更详细的证书信息。

curl --cert-info https://example.com

无命令:。。。

curl --cert-info https://onedayxyy.cn

image-20240806201216758

检查证书链

使用 --trace 选项可以追踪完整的证书链。

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

curl --trace - https://onedayxyy.cn

image-20240806201325229

强制验证证书

使用 --cacert 选项指定一个 CA 证书文件来验证服务器的证书。

curl --cacert /path/to/cacert.pem    https://example.com

禁用证书验证(仅用于测试)

如果你仅仅是为了测试,不在意安全性,可以临时禁用证书验证。然而,这个选项应该谨慎使用,不推荐在生产环境中使用。

curl -k https://example.com

使用 OpenSSL 检查证书

除了 curl,你也可以使用 openssl 命令来获取更多证书信息。

openssl s_client -connect example.com:443 -servername example.com

在输出中,你可以看到证书的详细信息,包括证书链、证书颁发者、有效期等。

总结

通过 curl 的不同选项,你可以获取 HTTPS 证书的详细信息,验证其安全性以及证书链的来源。以下是一些常用命令的汇总:

  • curl -v https://example.com:查看详细的连接及证书信息。
  • curl --cert-info https://example.com:获取详细的证书信息。
  • curl --trace - https://example.com:追踪完整的证书链。
  • curl --cacert /path/to/cacert.pem https://example.com:指定 CA 证书文件进行验证。

这些方法将帮助你了解 HTTPS 证书的来源和安全性。

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号 《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

http://onedayxyy.cn/

image-20231021104335916

image-20231021104405837

🍀 语雀

image-20231030124453217

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!