什么是cURL?

news2024/11/24 7:44:35

cURL无处不在。它几乎隐藏在所有设备中,例如汽车,蓝光播放器等。它通过互联网协议传输任意类型数据。

在本文中,我们将揭开cURL神秘命令行工具的面纱,解释它是如何成为一种通用代码的,并举例说明其用法。

cURL是什么意思?

cURL(客户端URL)是一个开放源代码的命令行工具,也是一个跨平台的库(libcurl),用于在服务器之间传输数据,并分发给几乎所有新的操作系统。cURL编程用于需要通过Internet协议发送或接收数据的几乎任何地方。

cURL支持几乎所有的互联网协议(DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP,RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP ,SMTPS,TELNET和TFTP)。

cURL的历史

回到90年代的黑暗时代,那时每个人仍然使用命令行工具,Daniel Sterberg希望开发一个简单的IRC脚本,该脚本可以为聊天室成员转换货币。在1997年,建立互联网协议数据传递基础的方法不多,因此Httpget(基于HTTP的传输的几百行代码)成为cURL的起源。为了纪念其基础,它率先被称为HTTPGET 1.0。

几个月后,开发出了FTP的支持,就不得不删除该名称了。现在,它被称为urlget 2.0。经过几次更新后,在1998年3月30日,名称再次更改为现在众所周知的cURL 3.0。

cURL之前其实还有相似的 wget。我们不会过多介绍细节,但是wget和cURL之间的主要区别在于它们各自的下载功能,例如前者可以从中断的传输中恢复并继续下载。

cURL的作用是什么?

cURL旨在通过互联网协议传输数据。其他所有内容均不在其范围内。它甚至不处理传输的数据,仅执行传输流程。

cURL可用于调试。例如使用“ curl -v https://oxylabs.io ”可以显示一个连接请求的详细输出,包括用户代理,握手数据,端口等详细信息。

可列出和解释的cURL命令选项太多了。幸运的是,可以使用“ curl –help”这个选项,它列出了所有curl命令行的用法,并附有简短的解释性注释。尽管这些命令行用法里没有有关如何使用cURL的相关背景知识介绍,用户也能通过列表知道一些命令行的用法。

如何使用cURL?

几乎所有具有相对较新操作系统的人都可以使用cURL,因为cURL在Windows,MacOS和大多数Linux发行版中作为默认设置提供。对于较早的系统,例如10之前的任何Windows操作系统,可能需要下载并安装cURL 。

要使用cURL,只需打开终端并输入“curl”。正常情况下,“curl -help”会自动跳出,用户可以选择是否执行“ curl –help”命令行。如前所述,“帮助”将列出所有命令可能性。

可以通过添加列出的命令行并键入URL来组合cURL命令。参数可以是短的(例如-o,-L等)或长的(例如-verbose)。这些参数通过使用单破折号或双破折号来区分。

curl访问淘宝的商品详情API,获取商品详情数据

 

使用cURL

发送请求

cURL是通过Internet协议进行数据传输且功能强大的工具。想要详细说明cURL能干什么并列出所有选项将是一项无法完成的任务。cURL用法多种多样,下面给大家展示一些常见的通用案例。

由于cURL最初是为HTTP开发的,因此我们可以发送所有常规请求(POST,GET,PUT等)。为了将POST请求发送到URL,使用-d(或–data)命令行。大多数网站都会拒绝未经授权的用户的此类请求,因此我们将使用虚假的API进行测试。

curl -d “name=something&value=somethingelse”

https://jsonplaceholder.typicode.com/posts/

发送这样的请求应该返回:

{

"name": "something",

"value": "somethingelse",

"id": 101

}

这里简单说下整个过程:

  • curl开始我们的命令
  • -d是POST请求的“数据”参数
  • 引号(“”)开始我们的内容声明。请注意,某些操作系统将仅接受单引号,而其他操作系统将接受双引号。
  • 最后是目的地。URL语法应始终准确,因为cURL不会自动跟随重定向。

我们也可以以JSON格式发送POST请求,但必须提供其他选项才能告诉服务器我们正在发送JSON。cURL不会代表用户做任何解释,并且会发送默认的application / text的Content-Type标头,因此我们必须自己添加标头Content-Type:application / json。

curl -H "Content-Type: application/json" --data

"{\"data\":\"some data\"}"

https://jsonplaceholder.typicode.com/posts/

跟随重定向

cURL不会自动跟随重定向。如果我们期望这样做,我们应该添加一个额外的命令行。让我们看一个例子:

curl https://baidu.com

我们的浏览器自行处理重定向,因此我们甚至可能不会注意到此类请求的问题。但是,如果我们发送cURL来完成工作,则会收到通知,说明文档在尝试连接时已被移动。以下让我们看看在win10命令提示符里直接执行以上指令所返回的结果:

我们可以看到显示的结果是302 Found,一些有经验的用户应该知道302 Found 是HTTP协议中的一个状态码(Status Code),可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;或者换个说法,就是该资源临时解析到某个URL下。通常会发送Header来暂时重定向到新位置。也就是说此处没有像常规浏览器那样自动跟随重定向。因此,为了使cURL跟随重定向,我们必须添加一个特殊的参数“ -L”(参数区分大小写)。

curl -L https://baidu.com

执行的结果如下:

现在,我们应该已经从Baidu收到了常规答案,因为cURL遵循从https://baidu.com到https://www.baidu.com 的重定向。

通过代理连接

cURL可用于通过代理连接到任何目的地。与其他任何cURL语句一样,URL,语法和其他所有内容都保持不变,除了添加的参数及其属性。

curl --proxy proxyaddress:port

https://jsonplaceholder.typicode.com/
在“ -proxy”之后输入代理和端口将通过输入的地址路径连接。代理通常需要提交详细的登录凭证来进行身份验证,用户可以通过-U参数的命令行来完成提交。

curl --proxy proxy:port -U “username:password”

https://jsonplaceholder.typicode.com/

某些网站在接受任何连接请求之前将需要进行身份验证。服务器身份验证使用类似的参数:“-u”。

curl -u username:password

https://jsonplaceholder.typicode.com/

下期我们将在文章中介绍更多有关cURL的内容。

结论

cURL是用于Internet协议传输的非常强大的工具。掌握其用法绝对不是一件容易的事情,然而它却能成为任何开发人员工具包中不可替代的工具。坦率地说,想在cURL用例上进行扩展不难,但是想要挖掘所有可能性,几乎是不可能实现的,因为涉及到的可能性太多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/902511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[MAUI]模仿网易云音乐黑胶唱片的交互实现

用过网易云音乐App的同学应该都比较熟悉它播放界面。 这是一个良好的交互设计,留声机的界面隐喻准确地向人们传达产品概念和使用方法:当手指左右滑动时,便模拟了更换唱盘从而导向切换歌曲的交互功能。 今天在 .NET MAUI 中我们来实现这个交互…

地球IT

地球是我们生活的家园,也是人类发展的基地。地球不仅仅是一个行星,更是一个复杂而有机的生态系统。 地球直径约为12,742公里,被称为“蓝色星球”,因为它的表面约70%被水覆盖。海洋是地球上最大的生态系统之一,它们扮演…

商城-学习整理-高级-商城业务-异步线程池(十三)

目录 一、线程1、初始化线程的 4 种方式2、线程池的七大参数3、线程池的运行流程:4、例子5、常见的 4 种线程池6、开发中为什么使用线程池 二、CompletableFuture 异步编排0、业务场景:1、创建异步对象2、计算完成时回调方法3、handle 方法4、线程串行化…

springboot 项目日志配置文件详解

spring boot 项目指定 日志配置文件 在Spring Boot项目中,可以通过在application.properties或application.yml文件中指定日志配置文件来配置日志。 1. 使用application.properties文件: 在application.properties中,您可以使用以下属性来…

系统卡死问题分析

CPU模式 CPU Frequency Scaling (CPUFREQ) Introduction CPU频率调节设备驱动程序的功能。该驱动程序允许在运行过程中更改CPU的时钟频率。一旦CPU频率被更改,必要的电源供应电压也会根据设备树脚本(DTS)中定义的电压值进行变化。通过降低时钟速度,这种方法可以减少功耗…

C语言刷题训练DAY.9

1.线段图案 解题思路&#xff1a; 这里非常简单&#xff0c;我们只需要用一个循环控制打印即可。 解题代码&#xff1a; #include<stdio.h> int main() {int n 0;while ((scanf("%d", &n)) ! EOF){int i 0;for (i 0; i < n; i){printf("*&…

js闭包用法以及和bind的结合使用

bind用法 let info { name: "xuhaitao", age: 36 }function haitao() {console.log(this);}let fun haitao.bind(info)fun();haitao(); 控制台打印: 闭包用法: function xiaoMing() {let v 1;function jia() {v;console.log(v);}function getV() {console.log(…

【C语言】每日一题(单词倒排)

单词倒排&#xff0c;链接奉上。 方法 做题前的预备知识双指针逆序整个逆序单词 做题前的预备知识 在做题时遇到有关判断字母与数字时&#xff0c;因为总会写成str>0&&str<9之类的形式&#xff0c;比较繁琐&#xff0c;而C语言为了解决这个问题&#xff0c;有了…

线段树详解——影子宽度

OK&#xff0c;今天来讲一讲线段树~~ 线段树是什么线段树的实现线段树的时间复杂度线段树的应用线段树的节点结构其他操作和优化例题——影子宽度输入输出格式输入格式输出格式 输入输出样例输入样例输出样例 例题讲解 线段树是什么 线段树&#xff08; S e g m e n t Segmen…

【设计原则】图解何为依赖倒置

依赖倒置原则&#xff08;Dependence Inversion Principle&#xff0c;DIP&#xff09;是指设计代码结构时&#xff0c;高层模块不应该依赖低层模块&#xff0c;二者都应该依赖其抽象。 要理解何为倒置&#xff0c;那就先得明确什么是“正向”&#xff0c;可以看到下图代码是自…

Element Plus <el-table> 组件之展开行Table在项目中使用

目录 官方样式&#xff1a; 展开前&#xff1a; 展开&#xff1a; 原始代码&#xff1a; 代码详解&#xff1a; 项目使用场景&#xff1a; 完成效果&#xff1a; 具体实现范本&#xff1a; 1.调整数据结构 2. 修改标签和数据绑定 3. JavaScript 部分导入和创建对象 …

浅谈日常使用的 Docker 底层原理-三大底座

适合的读者&#xff0c;对Docker有过简单了解的朋友&#xff0c;想要进一步了解Docker容器的朋友。 前言 回想我这两年&#xff0c;一直都是在使用 Docker&#xff0c;看过的视频、拜读过的博客&#xff0c;大都是在介绍 Docker 的由来、使用、优点和发展趋势&#xff0c;但对…

路由跳转--编程式导航

简介 除了使用 创建 a 标签来定义导航链接&#xff0c;我们还可以通过编程式导航实现导航。所谓编程式导航指的是不通过router-link跳转&#xff0c;而是借助 router 的实例&#xff0c;通过代码的方式跳转。 示例&#xff1a; App.vue <template><div id"ap…

正演的数值模拟(零基础,学习中)

摘要: 本贴从零开始学习正演的数值模拟方法. 1. 偏微分基础 引例: 物体从一维坐标的原点开始移动, 在 t t t 时刻, 它在坐标轴的位置由函数 s ( t ) s(t) s(t) 确定, 则速度为位置变化量与时间的比值: v ( t ) d s ( t ) d t lim ⁡ Δ t → 0 s ( t Δ t ) − s ( t )…

HDFS存储魔法解析:在二次元世界中跃动的数据冒险

文章目录 版权声明零 引缘起一 存储原理二 fsck命令2.1 副本块数量的配置2.1.1 全局设置方式2.1.2 临时设置方式 2.2 检查文件的副本数2.3 block大小和复制策略配置 三 NameNode元数据3.1 edits文件3.2 fsimage文件3.3 NameNode元数据管理维护3.4 元数据合并控制参数3.5 Checkp…

热门歌曲的伴奏--源代码

目录 使用方法 《起风了》歌词伴奏 《起风了》歌词 《生日歌》歌词伴奏 《生日歌》歌词 《童话》歌词伴奏 《童话》歌词 《光阴的故事》歌词伴奏 《光阴的故事》歌词 ​《千本樱》歌词伴奏 《千本樱》中文歌词 《平凡之路》歌词伴奏 《平凡之路》歌词 《孤勇者》…

Linux-在Ubuntu搭建ftp服务器

By: Ailson Jack Date: 2023.08.20 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/151.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

EndNote(一)【界面+功能介绍】

EndNote界面&#xff1a; 顶上小图标的介绍&#xff1a; ①&#xff1a;同步 ②&#xff1a;分享 ③&#xff1a;检索全文 对于第三个&#xff08;检索全文的功能&#xff09;&#xff1a; &#xff08;不做任何操作的情况下的界面&#xff0c;检索全文的按钮是灰的&…

详解:Mybatis参数获取和动态SQL以及分页功能

详解&#xff1a;Mybatis参数获取和动态SQL以及分页功能 前置准备项目结构在pom文件导入依赖创建properties配置文件创建Mapper接口创建Mapper映射文件SqlSession对象创建对应的表在数据库中实体类 SQL语句中的参数获取单个参数两个参数比较参数找不到的情况单个参数&#xff0…

C语言小练习(一)

&#x1f31e; “人生是用来体验的&#xff0c;不是用来绎示完美的&#xff0c;接受迟钝和平庸&#xff0c;允许出错&#xff0c;允许自己偶尔断电&#xff0c;带着遗憾&#xff0c;拼命绽放&#xff0c;这是与自己达成和解的唯一办法。放下焦虑&#xff0c;和不完美的自己和解…