当前位置: 首页 > news >正文

curl 的使用详解

curl 是一个非常强大的命令行工具,用于通过各种协议(如 HTTP、HTTPS、FTP 等)传输数据。它广泛应用于测试 API、下载文件、调试网络请求等。

下面是 curl 常用功能的详解及示例:

基本语法

curl [options] [URL]

1. 基本请求

  • 发起简单的 GET 请求:

    curl http://example.com
    

    这会向 http://example.com 发起一个 GET 请求,默认会把响应输出到终端。

  • 保存响应到文件:

    curl -o output.html http://example.com
    

    这里 -o 用于指定输出文件名。

2. 发送 POST 请求

  • 使用 -X POST 明确指定使用 POST 方法:

    curl -X POST http://example.com
    
  • 发送 POST 数据(表单数据或 JSON 数据):

    curl -X POST -d "name=John&age=30" http://example.com/form
    

    或者发送 JSON 格式的数据:

    curl -X POST -H "Content-Type: application/json" -d '{"name":"John", "age":30}' http://example.com/api
    

3. 设置请求头

你可以使用 -H 选项添加自定义的请求头:

curl -H "Authorization: Bearer token" http://example.com/api

设置多个请求头:

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

4. 携带 Cookie

如果需要模拟用户身份或会话,可以传递 Cookie

curl -b "sessionid=abcd1234" http://example.com/profile

5. 保存和加载 Cookie

curl 也可以自动保存并加载 Cookie 文件:

  • 保存 Cookie 到文件:

    curl -c cookies.txt http://example.com/login
    
  • 从文件加载 Cookie 并继续请求:

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

6. 跟随重定向

默认情况下,curl 不会跟随 HTTP 重定向。可以使用 -L 选项跟随重定向:

curl -L http://example.com

7. 显示响应头

使用 -i 可以同时显示响应头和响应体:

curl -i http://example.com

如果你只想查看响应头而不显示响应体,使用 -I--head 选项:

curl -I http://example.com

8. 上传文件

使用 -F 选项上传文件到服务器:

curl -X POST -F "file=@/path/to/file" http://example.com/upload

9. 输出控制

  • 将响应内容直接输出到终端:

    curl http://example.com
    
  • 使用 -o-O 将响应保存为文件:

    • -o 用来指定文件名:

      curl -o myfile.html http://example.com
      
    • -O 用来保留原文件名:

      curl -O http://example.com/myfile.html
      

10. 请求超时

设置最大请求时间 curl

curl --max-time 10 http://example.com

11. 用户认证

如果需要提供用户名和密码进行认证,可以使用 -u 选项:

curl -u username:password http://example.com/login

支持基本认证和其他 HTTP 认证类型。

12. 代理

通过 curl 发送请求时,可以设置代理服务器:

curl -x http://proxy.example.com:8080 http://example.com

13. 忽略 SSL 证书错误

如果目标服务器的 SSL 证书无效或自签名,可以使用 -k 忽略证书验证:

curl -k https://self-signed.badssl.com/

14. 调试和查看请求过程

使用 -v (verbose) 查看请求的详细过程:

curl -v http://example.com

如果想查看更多的调试信息,可以使用 --trace 选项:

curl --trace-ascii debug.txt http://example.com

15. 发送 DELETE 请求

类似于 POST,使用 -X DELETE 发送 DELETE 请求:

curl -X DELETE http://example.com/api/resource/123

常用组合示例

  1. 发起带有 JSON 的 POST 请求,并设置头信息

    curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer token" -d '{"name":"John"}' http://example.com/api
    
  2. 下载文件并显示进度条

    curl -O -# http://example.com/file.zip
    
  3. 携带 Cookie 并跟随重定向

    curl -L -b "sessionid=abcd1234" http://example.com/profile
    

16 批量下载文件

使用 curl 可以批量下载多个文件,非常适合爬取静态资源或自动化下载任务。比如下载一系列文件:

curl -O http://example.com/file1.zip -O http://example.com/file2.zip

或通过一个循环脚本批量下载:

for i in {1..10}; do curl -O http://example.com/file$i.zip; done

17. 检查服务器响应时间

curl 可以快速查看服务器的响应时间,适合用来做简单的性能测试:

curl -w "@curl-format.txt" -o /dev/null -s http://example.com

你可以自定义 curl-format.txt 来输出详细的时间信息:

time_namelookup:  %{time_namelookup}\n
time_connect:  %{time_connect}\n
time_appconnect:  %{time_appconnect}\n
time_pretransfer:  %{time_pretransfer}\n
time_starttransfer:  %{time_starttransfer}\n
-------------------------\n
time_total:  %{time_total}\n

18. 与 FTP 或 SFTP 交互

curl 支持 FTP 和 SFTP 协议,可以自动化文件传输任务:

  • 下载文件:

    curl -u username:password ftp://example.com/path/to/file
    
  • 上传文件:

    curl -T localfile -u username:password ftp://example.com/path/to/file
    

19. 调试 HTTP 请求

curl 提供详细的请求调试信息,可以用来检查 HTTP 请求的具体内容,比如查看请求头和响应头:

curl -v http://example.com

如果想要更深入的调试,可以使用 --trace 选项记录请求的所有细节:

curl --trace trace.txt http://example.com

20. 模拟不同的 User-Agent

有时候你需要伪装成某个特定的客户端(例如浏览器、手机)发送请求。可以使用 -A 指定 User-Agent

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://example.com

21. 结合 Shell 脚本

curl 嵌入到 Shell 脚本中可以实现自动化任务,比如定时监控服务器、批量请求 API、定期下载数据等:

#!/bin/bash
URL="http://example.com/api/data"
RESPONSE=$(curl -s $URL)if [[ "$RESPONSE" == *"error"* ]]; thenecho "Error detected in API response"
elseecho "API call successful"
fi

22. 模拟带身份认证的下载

当你需要从带有身份认证的网站下载资源时,curl 可以使用用户名和密码进行登录:

curl -u username:password http://example.com/protected/file.zip

如果你需要通过 OAuthBearer Token 等复杂认证方式下载,可以设置相关的头部信息:

curl -H "Authorization: Bearer your_token" -O http://example.com/api/protected/file.zip

23. 网页爬取

你可以使用 curl 来快速爬取网页的内容,用于自动化任务或者数据收集:

curl -L http://example.com -o webpage.html

结合正则表达式或其他命令行工具如 grepawk,你可以实现简单的网页抓取任务。

24. 检查网站 SSL 证书信息

curl 可以用于检查 SSL 证书的详细信息,这对于调试 HTTPS 或排查证书问题非常有用:

curl -vI https://example.com

它会展示关于 SSL 证书的详细信息,帮助你检查证书是否过期、是否正确配置等。

25. 模拟 HTTP 重定向

使用 -L 来模拟重定向的效果,并检查重定向链路:

curl -L http://example.com

这样,curl 会自动跟随 HTTP 重定向,直到到达最终的目标页面。

26. 发送压缩请求

curl 支持通过 gzipdeflate 压缩请求,减少带宽使用。你可以指定 Accept-Encoding 来告知服务器接收压缩格式的响应:

curl -H "Accept-Encoding: gzip, deflate" http://example.com

27. 检查站点是否在线

利用 curl 可以轻松监控站点是否在线。可以结合 HTTP 状态码来判断:

curl -o /dev/null -s -w "%{http_code}\n" http://example.com

如果状态码不是 200,说明站点有问题,可以结合 Shell 脚本做简单的报警机制。

28. 通过代理访问网站

如果你在网络受限的环境中,可以通过代理服务器发送请求:

curl -x socks5://127.0.0.1:1080 http://example.com

或者通过 HTTP 代理:

curl -x http://proxy.example.com:8080 http://example.com

相关文章:

curl 的使用详解

curl 是一个非常强大的命令行工具,用于通过各种协议(如 HTTP、HTTPS、FTP 等)传输数据。它广泛应用于测试 API、下载文件、调试网络请求等。 下面是 curl 常用功能的详解及示例: 基本语法 curl [options] [URL]1. 基本请求 发起…...

从基础到进阶:利用EasyCVR安防视频汇聚平台实现高效视频监控系统的五步走

随着科技的飞速发展,视频监控技术在社会安全、企业管理、智慧城市构建等领域扮演着越来越重要的角色。一个高效智能的视频监控管理系统不仅能够提升监控效率,还能在预防犯罪、事故预警、数据分析等方面发挥巨大作用。 一、需求分析 在设计视频监控管理…...

CORS漏洞及其防御措施:保护Web应用免受攻击

1. 背景- 什么是CORS? 在当今互联网时代,Web 应用程序的架构日益复杂。一个后端服务可能对应一个前端,也可能与多个前端进行交互。跨站资源共享(CORS)机制在这种复杂的架构中起着关键作用,但如果配置不当&…...

C语言自定义类型结构体(24)

文章目录 前言一、结构体类型的声明结构体回顾结构体的特殊声明结构体的自引用 二、结构体的内存对齐对齐规则为什么存在内存对齐?修改默认对齐数 三、结构体传参四、结构体实现位段什么是位段位段的内存分配位段的跨平台问题位段的应用位段使用的注意事项 总结 前言…...

补题篇--codeforces

传送门:Problem - 1881C - Codeforces 题目大意: 思路: 首先解决这个问题要知道 一个 ( x , y ) 顺时钟旋转 90 , 180 , 270可以得到 ( y , n - x 1 ) , ( n - x 1 , n - y 1 ) ,( n - y …...

【字幕】恋上数据结构与算法之015动态数组03简单接口的实现

我们先来看一下,不要着急啊大家不要着急,这些东西我肯定会一点一点会给大家去实现,最终实现到跟Java官方版本差不多,只要我们自己实现了,偶尔类似的,你会发现你倒回去看Java官方的那个源码,你会…...

基于2023年网络赛赛题了解OpenCv

一、OpenCv图像读取与显示 1.图像的读取与显示 cv.imread() 图像读取,第一个参数是照片的位置一般是完整路径,第二个参数是指定图片输出的样式 cv.IMREAD_COLOR: 加载彩色图像。任何图像的透明度都会被忽视。(默认模式)。cv.I…...

你到底更适合买虚拟主机还是服务器?

前言 在当今数字化的时代,选择合适的网络服务平台对于个人和企业来说至关重要。无论是搭建个人博客、运营企业网站还是开发游戏,服务器的选择都会直接影响到项目的成本、性能以及用户体验。那么,你到底适合虚拟主机还是服务器呢?…...

linux手册翻译 addr2line

名称 addr2line 将地址转换为文件名和代码行数 简介 addr2line [-a|--addresses][-b bfdname|--targetbfdname][-C|--demangle[style]][-r|--no-recurse-limit][-R|--recurse-limit][-e filename|--exefilename][-f|--functions] [-s|--basename][-i|--inlines][-p|--pretty-…...

python-素数中的等差数列

题目描述 质数是在数论中很有意思的数,有很多题都可以围绕它来出,就如你眼前所见的这道题。 给定一个闭区间 [a,b] ,将此范围内的所有素数进行从小到大排序,对于连续的素数,我们可以发现很多等差数列(元素个数大于等于 3 )&#x…...

Unity3D 服务器AStar寻路客户端位置同步显示验证详解

在游戏开发中,经常需要在服务器和客户端之间同步玩家的位置信息,以便其他玩家可以看到他们的移动。本文将详细介绍如何在Unity 3D中使用AStar算法进行路径规划,并在服务器和客户端之间同步玩家的位置信息。 对惹,这里有一个游戏开…...

无人机之悬停精度篇

无人机的悬停精度是指无人机在无GPS信号或其他外部定位辅助下,能够保持在一个固定空间位置时的精度。这一精度受到多种因素的影响,包括但不限于风速、气压、温度、湿度以及无人机自身的姿态稳定性等。以下是对无人机悬停精度的详细分析: 一、…...

力扣题解2848

大家好,欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述(简单): 与车相交的点 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i,nums[i] [starti, endi] &…...

电子电气架构---智能汽车应该是怎么样的架构?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不…...

无心剑七绝《中秋相思》

七绝中秋相思 中秋月满意深长 百代江阳老窖香 莫道天涯情不尽 相思寸寸赋华章 2023年9月29日 平水韵七阳平韵 这首诗七绝《中秋相思》由无心剑所作,以其深情的笔触描绘了中秋夜的相思之情。 诗中首句“中秋月满意深长”即以中秋圆月为起点,勾勒出了一幅…...

Python画笔案例-051 绘制赵爽弦图

1、绘制赵爽弦图 通过 python 的turtle 库绘制 赵爽弦图,如下图: 2、实现代码 绘制 赵爽弦图,以下为实现代码: """赵爽弦图.py本程序演录了如何自定义形状,如何把它添加到造型字典。赵爽弦图是用来证明…...

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器:embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件,取代物理硬件,为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…...

HTML + CSS - 网页布局之一般布局浮动布局

1. 一般布局 1.1 一般布局相关参数 元素内容常常可以想像为放在一个盒子里,然后在周边加上内边距,边框和外边距,是盒子模型 默认一个块级区域会填充父类所有的行向空间,并且沿着块伸长容纳其内容,可以为块状体设置某…...

python定时任务,定时爬取水质和天气

定时爬取水质和天气 代码 代码 from apscheduler.schedulers.background import BackgroundScheduler import requests import datetimeurlweather "http://localhost:8000/CrwalingViewWeather" # 天气接口 urlwater "http://localhost:8000/CrwalingViewW…...

ARM驱动学习之基础小知识

ARM驱动学习之基础小知识 • sch原理图工程师工作内容 – 方案 – 元器件选型 – 采购(能不能买到,价格) – 原理图(涉及到稳定性) • layout画板工程师 – layout(封装、布局,布线&#xff0c…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...