Linux curl 命令详解

2023-11-18

该命令设计用于在没有用户交互的情况下工作。

curl 是一个工具,用于传输来自服务器或者到服务器的数据。「向服务器传输数据或者获取来自服务器的数据」

可支持的协议有(DICT、FILE、FTP、FTPS、GOPHER、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMTP、SMTPS、TELNET和TFTP)。

curl提供了大量有用的技巧,比如代理支持、用户身份验证、FTP上传、HTTP post、SSL连接、cookie、文件断点续传、Metalink等等。正如你将在下面看到的,这些特性的数量会让您头晕目眩!

访问的URL

你可以在命令行上指定任意数量的url。它们将按指定的顺序依次获取。

你可以指定多个url,或url的部分通过在花括号内编写部分集,如:

http://site.{one,two,three}.com
# 参见
curl http://www.zhangblog.com/2019/06/16/hexo{04,05,06}/ -I  # 查看信息

或者可以使用[]得到字母数字序列的序列,如:

ftp://ftp.numericals.com/file[1-100].txt
ftp://ftp.numericals.com/file[001-100].txt   # 前导用零
ftp://ftp.letters.com/file[a-z].txt 
# 参见
curl http://www.zhangblog.com/2019/06/16/hexo[04-06]/ -I     # 查看信息

不支持嵌套序列,但可以使用几个相邻的序列:

http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html 

你可以指定一个步长计数器的范围,以获得每第n个数字或字母:

http://www.numericals.com/file[1-100:10].txt 
http://www.letters.com/file[a-z:2].txt 

如果指定URL而没有protocol:// prefix,默认为HTTP。

常用选项一

curl通常在操作过程中显示一个进度表,显示传输的数据量、传输速度和估计的剩余时间等。

-#, --progress-bar

将curl进度显示为一个简单的进度条;而不是标准的、具有更多信息的进度表。

[root@iZ28xbsfvc4Z 20190702]# curl -O http://www.zhangblog.com/2019/06/16/hexo04/index.html  # 默认的进度表
  %  Total    %  Received  % Xferd  Average  Speed   Time    Time     Time  Current
                                    Dload   Upload   Total   Spent    Left  Speed
100  97299  100  97299     0     0   186k       0 --:--:-- --:--:-- --:--:--  186k
[root@iZ28xbsfvc4Z 20190702]# 
[root@iZ28xbsfvc4Z 20190702]# curl -# -O http://www.zhangblog.com/2019/06/16/hexo04/index.html  #简单的进度条
######################################################################## 100.0%

-0, --http1.0

(HTTP)强制curl使用HTTP 1.0发出请求,而不是使用其内部首选的HTTP 1.1。

-1, --tlsv1

(SSL)强制curl使用TLS 1.x 版本,当与远程TLS服务进行协商时。
可以使用选项 --tlsv1.0、 --tlsv1.1和 --tlsv1.2来更精确地控制TLS版本(如果使用的SSL后端支持这种级别的控制)。

-2, --sslv2

(SSL)强制curl使用TLS 2 版本,当与远程TLS服务进行协商时。

-3, --sslv3

(SSL)强制curl使用TLS 3 版本,当与远程TLS服务进行协商时。

-4, --ipv4

如果curl能够将一个地址解析为多个IP版本(比如它支持ipv4和ipv6),那么这个选项告诉curl只将名称解析为IPv4地址。

-6, --ipv6

如果curl能够将一个地址解析为多个IP版本(比如它支持ipv4和ipv6),那么这个选项告诉curl只将名称解析为IPv6地址。

-a, --append

(FTP/SFTP)当在上传中使用时,这将告诉curl追加到目标文件而不是覆盖它。如果文件不存在,将创建它。注意,一些SSH服务器(包括OpenSSH)会忽略此标志。

-A, --user-agent <agent string>

(HTTP)指定要发送到HTTP服务端的User-Agent字符串。当然也可以使用 -H, --header 选项来设置。
用于模拟客户端,如:谷歌浏览器、火狐浏览器、IE 浏览器等等。

如果多次使用此选项,则将使用最后一个选项。

模仿浏览器访问

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/75.0.3770.999" http://www.zhangblog.com/2019/06/24/domainexpire/ 

--basic

(HTTP)告诉curl使用HTTP基本身份验证。这是默认的。

常用选项二

-b, --cookie <name=data>

(HTTP)将数据作为cookie传递给HTTP服务器。它应该是之前从服务端接收到的“Set-Cookie:”行中的数据。数据格式为“NAME1=VALUE1;NAME2 = VALUE2”。

如果行中没有使用 ‘=’ 符号,则将其视为一个文件名,用于读取先前存储的cookie行,如果它们匹配,则应在此会话中使用。
要读取cookie文件的文件格式应该是纯HTTP头文件或Netscape/Mozilla cookie文件格式。

注意:使用 -b, --cookie 指定的文件仅用作输入。文件中不会存储cookies。要存储cookies,可以使用 -c, --cookie-jar 选项,或者您甚至可以使用 -D, --dump-header 将HTTP头保存到文件中。

-c, --cookie-jar <file name>

(HTTP)指定希望curl在完成操作后将所有cookie写入哪个文件。
Curl写之前从指定文件读取的所有cookie,以及从远程服务端接收的所有cookie。
如果没有已知的cookie,则不会写入任何文件。该文件将使用Netscape cookie文件格式编写。如果你将文件名设置为单个破折号 “-” ,cookie将被标准输出。

该命令行选项将激活cookie引擎,使curl记录并使用cookies。激活它的另一种方法是使用 -b, --cookie 选项。

如果不能创建或写入cookie jar,那么整个curl操作就不会失败,甚至不能清楚地报告错误。使用 -v 会得到一个警告,但这是你得到的关于这种可能致命的情况的唯一可见反馈。

如果多次使用此选项,将使用最后指定的文件名。

--connect-timeout <seconds>

连接服务端的超时时间。这只限制了连接阶段,一旦curl连接了此选项就不再使用了。

也可参见:-m, --max-time 选项。

# 当前 https://www.zhangXX.com 是国外服务器,访问受限
[root@iZ28xbsfvc4Z ~]# curl --connect-timeout 10 https://www.zhangXX.com | head
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:10 --:--:--     0
curl: (28) Connection timed out after 10001 milliseconds

--create-dirs

当与 -o 选项一起使用时,curl将根据需要创建必要的本地目录层次结构。

这个选项只创建与 -o 选项相关的dirs,没有其他内容。如果 -o 文件名没有使用dir,或者其中提到的dir已经存在,则不会创建dir。

示例

curl -o ./hexo04/index.html --create-dirs http://www.zhangblog.com/2019/06/16/hexo04

-C, --continue-at <offset>

按给定偏移量继续/恢复以前的文件传输。给定的偏移量是将被跳过的确切字节数,从源文件的开头开始计算,然后再将其传输到目标文件。

使用 “-C -”「注意有空格和无空格的情况」,告诉curl自动找出在哪里/如何恢复传输。然后,它使用给定的输出/输入文件来解决这个问题。

# 下载一个 2G 的文件,可以反复测试,查看结果
curl -C - -o tmp.data http://www.zhangblog.com/uploads/tmp/tmp.data  

-d, --data <data>

使用该选项,那么默认请求方式为 POST。
(HTTP)在POST请求中向HTTP服务器发送指定的数据,与浏览器在用户填写HTML表单并按下submit按钮时所做的相同。这将导致curl使用content-type application/x-www-form-urlencoded将数据传递给服务器。也可参见:-F,-form 。

如果这些命令在同一个命令行使用多次,这些数据片段将使用指定的分隔符 & 合并。
因此,使用 ‘-d name=daniel -d skill=lousy’ 将生成一个类似 ‘name=daniel&skill=lousy’ 的post块,也可以直接这样合并使用。

-d, --data 与 --data-ascii 相同。post数据为纯粹的二进制数据时,那么使用 --data-binary 选项。要对表单字段的值进行url编码,可以使用 --data-urlencode。

如果您以字母@开始数据,那么其余的应该是一个文件名,以便从其中读取数据。或者 - 如果您希望curl从stdin【标准输入】读取数据。文件的内容必须已经是url编码的。还可以指定多个文件。因此,Posting数据名为 “foobar” 的文件将使用 --data @foobar 完成。

示例

请求信息:

[root@iZ28xbsfvc4Z 20190712]# curl -sv --local-port 9000 -d 'user=zhang&pwd=123456' http://www.zhangblog.com/2019/06/24/domainexpire/ | head -n1 
* About to connect() to www.zhangblog.com port 80 (#0)
*   Trying 120.27.48.179...
* Local port: 9000
* Co
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux curl 命令详解 的相关文章

  • 如何使用批处理脚本调用的curl 获取http post 请求的响应代码?

    我正在努力为从我们的工具之一发送 http post 请求提供支持 该工具基本上通过 http 请求执行作业 实现此目的的方法是该工具使用多个参数调用 RunScript bat 该脚本解析这些参数并在验证后发出curl post 请求 P
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • Inotify linux 监视子目录

    是否可以以这种模式监视目录 storage data usernames Download gt storage data Download 我需要监视每个用户的下载文件夹中是否进行了更改 也许我需要创建所有路径的列表 将其放入数组中 并在
  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • 每个进程每个线程的时间量

    我有一个关于 Windows 和 Linux 中进程和线程的时间量子的问题 我知道操作系统通常为每个线程提供固定的时间量 我知道时间量根据前台或后台线程而变化 也可能根据进程的优先级而变化 每个进程有固定的时间量吗 例如 如果操作系统为每个
  • 适用于 KDE 和 Gnome 的 Gui [重复]

    这个问题在这里已经有答案了 我想为一个现在是 CLI 的应用程序编写一个 gui 它需要在 KDE 和 Gnome DE 中 看起来不错 充分利用用户的外观设置 如果我选择 Qt 或 GTK 我能够做到这一点吗 它们与两个 DE 集成良好吗
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • php 检查文件是否存在于外部域中(从子域访问)

    我有一个网站http www reelfilmlocations co uk http www reelfilmlocations co uk 上述网站有一个管理区域 其中上传图像并在 uploads images 目录的子文件夹中创建不同
  • shell_exec 的输出被截断为 100 个字符

    当在 shell 中运行以下命令时 curl F file filename http 192 168 0 1 产生以下输出 Accuracy 0 0 1 classification Accuracy 0 0 1 classificati
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • curl 无法获取网页内容,为什么?

    我正在使用curl 脚本转到链接并获取其内容以进行进一步操作 以下是链接和curl脚本
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1

随机推荐

  • DNS 基础知识及 Linux DNS 服务器操作知识

    一 DNS域名结构与域名服务器 域名系统DNS Domain Name System 是因特网使用的命名系统 用来把便于人们使用的机器名字转换成为IP地址 域名系统其实就是名字系统 为什么不叫 名字 而叫 域名 呢 这是因为在这种因特网的命
  • 调用OpenAI接口失败的原因

    谈谈我研究OpenAI的感受 Chatgpt的后台时基于OpenAI研发的 但是国内一直无法使用Chatgpt 2023年2月份研究了OpenAI接口 为了国内能体验ChatGpt 就自己搭建了网站 并集成了几十个接口到自己的网站 也有很多
  • SpringBoot项目启动报错--“xxx程序包不存在“

    问题描述 SpringBoot项目 从主分支拉了一个新的分支 运行时报错xxx程序包不存在 原因分析 因为是从master新拉的分支 里面有以前已经编译好的target 可能是拉过来的分支有些地方没编译到 导致找不到程序包 解决方案 将项目
  • Ubuntu 18.04上安装CMake的简单经验流程

    这篇博客继续第一篇和第二篇的内容 这篇相对简单 按照这里的介绍 https cmake org install 我们直接把CMake的压缩包下载下来 解压后首先运行 bootstrap 如果是在一个比较新的系统上安装 则有可能会报下面的错
  • 【githubshare】无需编写一行代码,即可自动为静态数据集生成只读 API,快速完成静态数据的加载调用

    推荐 GitHub 上一款开源的开发者工具 ROAPI 无需编写一行代码 即可自动为静态数据集生成只读 API 快速完成静态数据的加载调用 GitHub github com roapi roapi 静态数据集所支持的格式 包括 CSV J
  • 学习才是测试猿的永动力!超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

    前 言 前几篇文章介绍了 pytest 点的基本使用 学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求 从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数 插件开发等等 仔细去看过 pytest 文档的小伙伴
  • OO ALV checkbox更新的问题

    OO ALV在CHECKBOX的处理与FUNCTION ALV有稍微的不同 在调用set table for first display后需要加上以下语句才能实现点击后自动更新内表 CALL METHOD g grid gt registe
  • 【Python开发】python PIL读取图像转换为灰度图及另存为其它格式(也可批量改格式)...

    例如有一幅图 文件名为 a jpg 读取 from PIL import Image 或直接import Image im Image open a jpg 将图片转换成灰度图 im1 im convert L 所以 打开图片并转换成灰度图
  • 基于SVPWM改进的永磁同步电机直接转矩控制二更

    导读 本期对基于SVPWM的永磁同步电机直接转矩控制进行全面的分析和仿真搭建 之后与传统的DTC进行比较 凸显基于SVPWM改进的DTC方法的有效性 如果需要文中的仿真模型 关注微信公众号 浅谈电机控制 留言获取 一 传统直接转矩控制系统存
  • 调试最长的一帧(第23天)

    看看总体进度 第22天通过CUllvisitor创建了渲染树和状态树 并进行必要的剔除 接下来进行排序和优化 RenderStage sort函数时按照前序渲染台 当前渲染台和后续渲染台的顺序进行 其中前序渲染台和后续渲染台通过Camera
  • 一台云服务器怎么挂多个网站吗,一台云服务器怎么挂多个网站

    一台云服务器怎么挂多个网站 内容精选 换一换 通过华为云备案 需要先购买华为云中国大陆节点服务器 用于网站备案使用 后称为 备案服务器 目前可用于华为云备案的服务器 请参见备案服务器 如果您的华为云帐号A中没有可备案的服务器 华为云帐号B中
  • .npmrc给单独包设置源

    1 package json中的dependencies或者devDependencies模块设置要下载包的版本信息 例如 dependencies antv g 3 4 10 2 在 npmrc中设置对应源 antv g registry
  • 通过css去掉input框默认样式

    input 去除阴影 box shadow none 聚焦input的蓝色边框 outline none textarea 禁止拖拽 resize none 去除边框 border none 常用于IOS下移除原生样式 webkit app
  • Java使用opencv计算两个多边形交并比IOU、重叠面积占比

    opencv引入配置看这里https blog csdn net angelpaiy article details 126870213 需要引入的opencv类 import org opencv core Scalar import o
  • Dart中常用的集合类型List、Set、Map、Queue

    Dart中常用的集合类型 List 列表 有序集合 可以修改数据 Dart中List对应数组 可以通过索引访问元素 Set 集合 无序 不可重复 常用于过滤重复数据 Map 映射 键值对集合 键必须唯一 值可以重复 常用于存储关联数据 Qu
  • 分享5个关于 Vue 的小知识,希望对你有所帮助(五)

    大家好 今天我继续分享5个关于 Vue 的小知识 希望对你有所帮助 往期文章 分享5个关于 Vue 的小知识 希望对你有所帮助 一 分享5个关于 Vue 的小知识 希望对你有所帮助 二 分享5个关于 Vue 的小知识 希望对你有所帮助 三
  • CTRL键不能使用(非硬件问题)

    如果ctrl键不能用了 并且排除是硬件问题 排除方法 电脑有两个CTRL键 可以试试另一个是否可以使用 那么肯定是驱动除了问题 相关链接 根据上面的教程修改之后 我的驱动是无法更新的 我换了一个驱动就能正常使用了 选择驱动程序详细信息 然后
  • ad7606中文资料_16位ADC数据采集模块AD7606(原理图、中文数据手册、例程等)

    AD7606 数据采集模块 16位ADC 8通道同时200KHz频率采集 每秒8 200K样本 SPI接口或8080 16位并口 可自行选择 AD7606 数据采集模块特性 使用AD7606 高精度16位ADC芯片 8路模拟输入 阻抗1M欧
  • ZED安装

    1 下载对应版本的ubantu的sdk 运行 run文件 2 安装过程中可能会存在依赖关系错误的问题 可以解决的方法有二 一 换源 二 网上搜依赖关系的解决方法 3 运行get api py会出现一直downing的情况 解决方法有二 一
  • Linux curl 命令详解

    该命令设计用于在没有用户交互的情况下工作 curl 是一个工具 用于传输来自服务器或者到服务器的数据 向服务器传输数据或者获取来自服务器的数据 可支持的协议有 DICT FILE FTP FTPS GOPHER HTTP HTTPS IMA