什么是cURL?

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.mzph.cn/news/44760.shtml

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

相关文章

PHP海外代购管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 海外代购管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88229435 论文 https://…

maven 环境变量的配置

1、安装好maven /home/sunyuhua/dev/apache-maven-3.9.32、编辑环境变量 vi /etc/profile.d/maven.shexport MAVEN_HOME/home/sunyuhua/dev/apache-maven-3.9.3 export PATH$PATH:$MAVEN_HOME/bin3、执行source source /etc/profile4、检验 mvn -version5、附注&#xff1a…

Redis中的分布式锁及其延生的问题

前言 本文将着重介绍Redis中的分布式锁及其与出现的死锁和锁误删问题 什么是分布式锁 首先问题就是什么是分布式锁,分布式锁就是分布式系统中实现并发控制的一种锁机制,它可以保证多个节点在同一个时间只有有一个能成功竞争到系统资源(共享…

LeetCode算法递归类—二叉树中的最大路径和

目录 124. 二叉树中的最大路径和 - 力扣(LeetCode) 题解: 代码: 运行结果: 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该…

Hive无法启动的解决方案

关掉虚拟机后,重新启动后,按照Hadoop和Hive的流程重新启动,发现无法启动成功,特别是元数据服务无法启动,出现以下错误: Exception in thread “main” java.lang.RuntimeException: java.net.ConnectException: Call F…

华为OD真题--分月饼--带答案

1. 华为OD机考题 答案 2023华为OD统一考试(AB卷)题库清单-带答案(持续更新) 2023年华为OD真题机考题库大全-带答案(持续更新) 2. 面试题 一手真实java面试题:2023年各大公司java面试真题汇总--…

基于Opencv的虚拟拖拽项目

预备知识 勾股定理 跟随移动算法 手势识别图解 项目源代码 """ 演示一个简单的虚拟拖拽 步骤: 1、opencv 读取视频流 2、在视频图像上画一个方块 3、通过mediapipe库获取手指关节坐标 4、判断手指是否在方块上 5、是,方块跟着移动 6、…

LeetCode1048 最长字符串链

思路 从短到长,增加字母的话,有多个位置,并且每个位置都有26种选择,正难则反。选择从长到短,删除某个字母。删除字母得到的新字符串可能已经计算过,所以将计算的结果都记录一下。记忆化搜索: 先…

密码学学习笔记(十九):密码学关键术语的解释1

数据加密标准(DES) 数据加密标准是使用最广泛的加密体制,它于1977年被美国国家标准和技术研究所(NIST)采纳为联邦信息处理标准FIPS PUB 46。 DES3DESAES明文分组长度(位)6464128密文分组长度(位)6464128密钥长度&…

开源Android apk转aab工具

功能 自动化将apk转为aab文件.自动化实现打包smali,签名,安装. 用法 配置文件(config.toml ) [sign] #"exec command: java -jar {} build-apks --bundle {} --output {} --ks {} --ks-pass pass:{} --ks-key-alias {} --key-pass pass:{}", config.jar.bundleto…

详解junit

目录 1.概述 2.断言 3.常用注解 3.1.Test 3.2.Before 3.3.After 3.4.BeforeClass 3.5.AfterClass 4.异常测试 5.超时测试 6.参数化测试 1.概述 什么是单元测试: 单元测试,是针对最小的功能单元编写测试代码,在JAVA中最小的功能单…

0101读写分离测试-jdbc-shardingsphere-中间件

文章目录 1 前言2、创建SpringBoot程序2.1、创建项目2.2、添加依赖2.3、生成实体类、service与Mapper1.5、配置读写分离 2、测试2.1、读写分离测试2.2、事务测试2.3、负载均衡测试 结语 1 前言 shardingshpere-jdbc定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的…

【前端面试】中大文件上传/下载:中等文件代理服务器放行+大文件切片传输+并发请求+localstorage实现断点续传

目录 中等文件代理服务器放行:10MB为单位 proxy nginx 大文件切片:100MB为单位 断点:存储切片hash 前端方案A localstorage 后端方案B 服务端 上传 前端 后端 下载 前端 后端 多个大文件传输:spark-md5 哈希碰撞…

什么是Pytorch?

当谈及深度学习框架时,PyTorch 是当今备受欢迎的选择之一。作为一个开源的机器学习库,PyTorch 为研究人员和开发者们提供了一个强大的工具来构建、训练以及部署各种深度学习模型。你可能会问,PyTorch 是什么,它有什么特点&#xf…

JQuery快速入门教程

1、JQuery快速入门 1.1、JQuery介绍 jQuery 是一个 JavaScript 库。所谓的库,就是一个 JS 文件,里面封装了很多预定义的函数,比如获取元素,执行隐藏、移动等,目的就 是在使用时直接调用,不需要再重复定义…

微机原理与接口技术 学习笔记(二) 存储器

文章目录 一,存储器1.1 概述1.1.1 半导体存储器的分类按制造工艺: 易失性或挥发性存储器 / 不易失性或不挥发性存储器按制造工艺: 1.1.2 半导体存储器的性能指标1.1.3 半导体存储器的一般结构及组成 1.2 随机存取存储器 RAM1.2.1 静态RAM1.2.…

【数据结构】_8.二叉树OJ

目录 1. 题目1:检查两棵树是否相同 2. 题目2:判断一棵树是否为另一棵树的子树 3. 题目3:翻转二叉树 4. 题目4:判断一棵树是否为平衡二叉树 5. 题目5:判断一棵树是否为对称二叉树 6. 题目6:二叉树的层序…

第二周晨考自测(2.0)

1.冒泡排序 冒泡排序是数组解构中的常见排序算法之一。规则如下:先遍历数组,让相邻的两个数据进行比较,如果前一个比后一个大,那么就把这两个数据交换位置,经过一轮遍历之后,最大的那个数字就排在数组最后…

UML图绘制 -- 类图

1.类图的画法 类 整体是个矩形,第一层类名,第二层属性,第三层方法。 :public- : private# : protected空格: 默认的default 对应的类写法。 public class Student {public String name;public Integer age;protected I…

机器学习知识点总结:什么是GBDT(梯度提升树)

什么是GBDT(梯度提升树) 虽然GBDT同样由许多决策树组成,但它与随机森林由许多不同。 其中之一是GBDT中的树都是回归树,树有分类有回归,区分它们的方法很简单。将苹果单纯分为好与坏的是分类树,如果能为苹果的好坏程度打个分&…