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

【字幕】恋上数据结构与算法之019动态数组07打印数组

是吧?什么意思呢?你看啊我们刚刚已经加了三个东西了,我现在希望能够打印一下这个速度,希望能把它里面所有元素打出来,那我们试一下,看它默认是怎么打,这个时候我们右击你会发现它打出来长这样子…...

Python基础语法(3)下

列表和元组 列表是什么,元组是什么 编程中,经常需要使用变量,来保存/表示数据。变量就是内存空间,用来表示或者存储数据。 如果代码中需要表示的数据个数比较少,我们直接创建多个变量即可。 num1 10 num2 20 num3…...

数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例

时间序列概况在日常生活和专业研究中都很常见。简而言之,时间序列概况是一系列连续的数据点 y(0), y(1), …, y(t) ,其中时间 t 的点依赖于时间 t-1 的前一个点(或更早的时间点)。 在许多应用中,研究者致力于预测时间序列概况的未来行为。存在各种建模方法。这些模型通常基于过…...

XML_Tomcat_HTTP

第四章 XML_Tomcat10_HTTP 一 XML XML是EXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。 可扩展 三个字表面上的意思是XML允许自定义格式。但这不代…...

GPT Prompt

Reference https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-apihttps://platform.openai.com/docs/guides/prompt-engineeringbilibili 8分钟系统学习提示工程,别再说大模型还不够聪明!Prompt Engineering,提示词,Few…...

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步…...

【字幕】恋上数据结构与算法之014动态数组02接口设计

申请表数组英文单词叫away,而这个数组是怎么样的申请表?数组是一种顺序存储的申请表,什么叫顺序存储?就是数组里面的所有元素,它的内存地址是连续的,大家的内存是连续的,比如说举个例子&#xf…...

ffmpeg硬件解码一般流程

流程 根据硬件名称,查询是否是支持的类型 const char *device_name "qsv"; //cuda enum AVHWDeviceType type av_hwdevice_find_type_by_name(device_name); if(type AV_HWDEVICE_TYPE_NONE) {//如果一个硬件类型是不支持的,打印所有支持…...

微信支付开发-程序开发

一、操作流程图 二、后端代码实现 1、题库实现 a、列表、所有、详情、保存、启禁用、导入答题 b、获取奖品信息、保存奖品信息、 class Question extends Base {// 列表public function getList(){$param $this->request->param();$where [];if(!empty($param[title])…...

【数据结构】排序算法系列——堆排序(附源码+图解)

堆排序 堆排序基于一种常见的**[[二叉树]]结构**:堆 我们前面讲到选择排序,它在待排序的n个记录中选择一个最小的记录需要比较n一1次。本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则无法知道它是最小的记录。 …...