当前位置: 首页 > 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…...

2026.4.5

线段树&#xff0b;lazy标记#include<bits/stdc.h> using namespace std; #define int long long #define N 100004 int num[N],tree[4*N],n,q,ans; int len[4*N],lazy[4*N]; char op; int a1,a2,a3; void updata(int xx) {tree[xx]tree[xx*2]tree[xx*21];len[xx]len[xx*…...

数据结构之伸展树(Splay Tree)详解

伸展树&#xff08;Splay Tree&#xff09;详解 目录 引言伸展树的基本概念伸展操作伸展树的操作 插入操作查找操作删除操作 时间复杂度分析伸展树与其他平衡二叉搜索树的比较应用场景代码实现示例总结 引言 伸展树&#xff08;Splay Tree&#xff09;是一种自调整的二叉搜…...

解锁高效操作:5款菜单栏管理工具的深度评测与场景适配指南

解锁高效操作&#xff1a;5款菜单栏管理工具的深度评测与场景适配指南 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice macOS菜单栏作为系统交互的核心界面&#xff0c;随着应用增多常陷入混乱&#…...

2026届学术党必备的五大AI学术神器实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek身为智能写作工具&#xff0c;可在论文写作之整个流程里起到辅助功效&#xff0c;于…...

STM32内存管理实战:如何避免局部变量数组导致的栈溢出问题?

ST32内存管理实战&#xff1a;如何避免局部变量数组导致的栈溢出问题&#xff1f; 在嵌入式开发领域&#xff0c;内存管理一直是开发者必须面对的挑战之一。对于使用STM32系列微控制器的开发者来说&#xff0c;理解并掌握内存分配机制尤为重要。本文将深入探讨STM32开发中常见的…...

重新定义零代码开发:H5-Dooring的反常识实践指南

重新定义零代码开发&#xff1a;H5-Dooring的反常识实践指南 【免费下载链接】h5-Dooring H5 Page Maker, H5 Editor, LowCode. Make H5 as easy as building blocks. | 让H5制作像搭积木一样简单, 轻松搭建H5页面, H5网站, PC端网站,LowCode平台. 项目地址: https://gitcode…...

RetDec反编译工具完整指南:从新手到专家的逆向工程利器

RetDec反编译工具完整指南&#xff1a;从新手到专家的逆向工程利器 【免费下载链接】retdec RetDec is a retargetable machine-code decompiler based on LLVM. 项目地址: https://gitcode.com/gh_mirrors/re/retdec RetDec是一款基于LLVM架构的可重定向机器码反编译器…...

SpringCloud之分布式基础

1.单体架构单体架构是将所有业务功能&#xff08;商品、订单、用户、支付、物流等&#xff09;打包在一个应用项目中&#xff0c;部署在同一台服务器上的传统架构模式。架构流程&#xff1a;用户 → 通过域名&#xff08; gulishop.com &#xff09;访问 → 绑定服务器公网 IP …...

DecompilerMC:揭秘Minecraft源码反编译的高效方案

DecompilerMC&#xff1a;揭秘Minecraft源码反编译的高效方案 【免费下载链接】DecompilerMC This repository allows you to decompile any minecraft version that was published after 19w36a without any 3rd party mappings, you just need to execute the script or the …...

基于STM32CubeMX HAL库的RS485半双工通信实战指南

1. RS485通信基础与STM32开发环境搭建 第一次接触RS485通信时&#xff0c;我被它独特的半双工特性深深吸引。想象一下双向单车道的马路&#xff0c;车辆只能单向交替通行&#xff0c;这就是半双工的精髓。相比全双工需要两根数据线的设计&#xff0c;RS485仅用一对双绞线就能实…...