Curl工具小记
curl 是一个非常强大且灵活的命令行工具,用于获取或发送数据,无需用户图形界面交互。它支持多种协议,并且可以在脚本中使用,以实现自动化任务。
基本介绍
- curl 是 “Client URL” 的缩写,它是一个利用 URL 语法在命令行下工作的文件传输工具。
- 版本:
curl最初发布于 1997 年。 - 支持的协议: 包括 HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP, LDAPS, RTMP, RTSP, POP3, POP3S, IMAP, IMAPS, SMTP, SMTPS 等。
- 功能: 下载文件、上传文件、执行 HTTP 请求、测试网络服务可用性等。
- 库:
curl包含了一个名为libcurl的库,用于程序开发。
安装
如果系统中没有安装 curl,可以通过包管理器安装:
sudo apt-get install curl # Debian/Ubuntu
sudo yum install curl # CentOS/RHEL
sudo pacman -S curl # Arch Linux
命令格式
curl [选项] [目标URL]
常用选项
-X, --request <command>: 指定请求方法(GET, POST, PUT, DELETE 等)。-d, --data <data>: 发送数据到服务器。-u, --user <user:password>: 指定用户名和密码。-o, --output <file>: 将输出写入文件。-O, --remote-name: 直接保存远程文件名。-L, --location: 跟随重定向。-I, --head: 获取头部信息。-v, --verbose: 显示详细信息。-V, --version: 显示版本信息。-s, --silent: 静默模式,不显示进度条。-H, --header <header>: 自定义头部信息。-A, --user-agent <agent>: 设置 User-Agent 字段。-i, --include: 包含头部信息在输出中。-J, --remote-header-name: 使用远程文件的名称。-T, --upload-file <file>: 上传文件。-x, --proxy <host:port>: 使用 HTTP 代理。-b, --cookie <name=value>: 发送 Cookie。-c, --cookie-jar <filename>: 保存 Cookie 到文件。-e, --referer <url>: 设置 Referer 字段。-m, --max-time <seconds>: 设置最大时间限制。-k, --insecure: 允许连接到不受信任的 SSL 站点。-f, --fail: 服务器返回错误时退出。
示例
-
下载文件:
curl http://example.com/file.txt -o file.txt -
发送 POST 请求:
curl -X POST -d "param1=value1¶m2=value2" http://example.com/api -
模拟浏览器:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://example.com -
使用代理:
curl -x proxy.example.com:8080 http://example.com -
上传文件:
curl -T localfile ftp://example.com/remote/path/ -
获取头部信息:
curl -I http://example.com
基本 GET 请求
最简单的 GET 请求就是直接指定 URL,curl 会自动使用 GET 方法获取资源:
curl http://example.com
这将打印出从 http://example.com 获取的 HTML 内容。
包含查询参数
如果你需要向 URL 添加查询参数,可以直接在 URL 后面加上 ? 和参数字符串:
curl 'http://example.com/?q=query+string¶m=value'
或者你可以使用 -G 或 --get 选项来明确地指定 GET 请求,并使用 -d 或 --data 来添加参数:
curl -G 'http://example.com/' -d 'q=query+string' -d 'param=value'
设置请求头
你还可以设置自定义的 HTTP 头部信息,例如设置 User-Agent 或 Accept:
curl -H 'User-Agent: MyCustomAgent/1.0' -H 'Accept: application/json' http://example.com
跟随重定向
如果你要访问的 URL 可能会被重定向,可以使用 -L 或 --location 选项来跟随重定向:
curl -L http://example.com
保存响应到文件
如果你想将响应的内容保存到文件而不是显示在终端上,可以使用 -o 或 --output 选项:
curl http://example.com -o output.html
输出 HTTP 头部信息
如果你想查看服务器返回的 HTTP 头部信息,可以使用 -I 或 --head 选项:
curl -I http://example.com
或者使用 -i 或 --include 选项来同时输出头部信息和主体内容:
curl -i http://example.com
限制请求时间
如果你希望设置请求的最大时间限制,可以使用 -m 或 --max-time 选项:
curl -m 10 http://example.com
这里的时间单位是秒。
使用代理
如果你需要通过代理服务器访问网站,可以使用 -x 或 --proxy 选项:
curl -x proxy.example.com:8080 http://example.com
发送 POST 请求是 curl 的一个常用功能。下面是一些示例来说明如何使用 curl 发送 POST 请求。
基本 POST 请求
发送一个基本的 POST 请求,包括一个简单的参数:
curl -X POST -d "param1=value1¶m2=value2" http://example.com/api
这里的 -X POST 指定了请求方法为 POST,而 -d 参数用来传递 POST 数据。
使用 JSON 数据
如果你需要发送 JSON 格式的数据,可以使用 -H 添加 Content-Type 为 application/json,并使用 -d 或 -F 来发送 JSON 数据:
curl -X POST \-H "Content-Type: application/json" \-d '{"key1":"value1", "key2":"value2"}' \http://example.com/api
注意,如果你发送的是 JSON 格式的字符串,最好使用单引号 (') 来避免 shell 对双引号 (") 中的特殊字符进行转义。
使用文件中的 JSON 数据
如果 JSON 数据存储在一个文件中,可以读取该文件内容并发送:
curl -X POST \-H "Content-Type: application/json" \-d @path/to/data.json \http://example.com/api
这里 @path/to/data.json 表示从文件中读取 JSON 数据。
使用表单数据
对于表单数据,你可以使用 -F 或 --form 选项来发送数据,这样可以更好地处理文件上传和其他表单字段:
curl -X POST \-F "username=john" \-F "password=secret" \-F "file=@/path/to/local/file" \http://example.com/upload
这里 -F 用于发送表单字段,@/path/to/local/file 用于指定要上传的文件。
设置 HTTP 头部信息
你也可以设置其他 HTTP 头部信息,比如 User-Agent 或者 Authorization:
curl -X POST \-H "User-Agent: MyCustomAgent/1.0" \-H "Authorization: Bearer ACCESS_TOKEN" \-d "param1=value1¶m2=value2" \http://example.com/api
使用代理
如果你需要通过代理服务器发送 POST 请求,可以使用 -x 或 --proxy 选项:
curl -X POST \-x proxy.example.com:8080 \-d "param1=value1¶m2=value2" \http://example.com/api
附加认证
如果 API 需要基本认证,你可以使用 -u 或 --user 选项来提供用户名和密码:
curl -X POST \-u "username:password" \-d "param1=value1¶m2=value2" \http://example.com/api
限制请求时间
如果你想限制整个请求的最大时间,可以使用 -m 或 --max-time 选项:
curl -X POST \-m 10 \-d "param1=value1¶m2=value2" \http://example.com/api
这里的 10 表示 10 秒。
相关文章:
Curl工具小记
curl 是一个非常强大且灵活的命令行工具,用于获取或发送数据,无需用户图形界面交互。它支持多种协议,并且可以在脚本中使用,以实现自动化任务。 基本介绍 curl 是 “Client URL” 的缩写,它是一个利用 URL 语法在命令…...
【C#语音文字互转】C#语音转文字(方法一)
Whisper.NET开源项目:https://github.com/sandrohanea/whisper.net/tree/main 一. 环境准备 在VS中安装 Whisper.net,在NuGet包管理器控制台中运行以下命令: Install-Package Whisper.net Install-Package Whisper.net.Runtime其中运行时包…...
基于Linux系统下的在线手机商城
项目背景 随着网络的发展,电子商务的兴起和普及使得消费者越来越倾向于通过互联网购买商品和服务,越来越多的传统零售商和新兴企业转向在线销售以满足消费者的需求,个成功的在线商城项目背景包括对市场需求、竞争环境、技术和平台选择、商业…...
Apache Kafka 事务详解
Apache Kafka 事务详解 Apache Kafka 是一个分布式流处理平台,主要用于实时数据的传输和处理。在现代的数据密集型应用中,事务性保证在数据传输和处理中的作用至关重要。本文将详细介绍 Kafka 的事务性支持,包括其基本概念、架构、使用方法以…...
Go语言 结构体
本文主要为Go语言 结构体介绍、语法、使用注意及其示例。 目录 结构体 语法 语法示例 语法说明 声明使用 创建并赋值 使用指针 使用注意 总结 结构体 C语言里面,我们可以使用typedef in MyInt。 在go语言中使用结构体来模拟类,使用type stru…...
数据结构(邓俊辉)学习笔记】词典 03—— 排解冲突(1)
文章目录 1. 一山二虎2. 泾渭分明3. 开放定址4. 线性试探5. 赖惰删除 1. 一山二虎 此前我们已经多次指出,对于需要动态维护的散列表冲突是不可避免的,无论你的散列函数设计的有多么精妙,因此我们不得不回答的第二个重要问题就是一旦发生冲突&…...
HTML5+CSS3-HTML5入门
1.web标准 W3C为web标准化做出了以下事项,主要包括结构,表现和行为。 结构用于对网页的信息进行分类和整理,使用技术包括HTML,XML,XHTML 表现指网页的外在样式,一般包括网页的版式,颜色,字体,…...
谷粒商城实战笔记-138-商城业务-首页-渲染二级三级分类数据
本节的主要内容是在前一节的基础上,提供结构查询出所有的二级、三级分类数据。 一,构造响应体数据结构 后端返回给前端的数据结构是在开发详细设计中应该确定的内容。 分析前端需要的数据结构,后端要将所有一级分类包含的二级和三级分类信…...
git的基础用法
文章目录 前言关联仓库提交代码分支操作账号免密 前言 记录一下git的一些基础用法。 关联仓库 # 初始化 git init# 关联仓库 git remote add origin <仓库地址># 查看当前关联的仓库 git remote -v# 一次只能remote一个,要换需要先删原来的 git remote rem…...
常见中间件漏洞(四、Apache合集)
目录 四、Apache 4.1 CVE-2021-41773 漏洞简介 影响版本 环境搭建 漏洞复现 四、Apache 4.1 CVE-2021-41773 Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录<Directory/>Require all gra…...
HCIE-学习笔记
动态授权加入的成员优先级高于静态绑定的成员; any组(缺省):所有用户或资源,通常用来配置默认规则。any组只能做目的组,不支持配置为源组。 同一个安全组既可以与多条授权规则绑定来表示动态用户࿰…...
【计算机网络】性能指标-带宽和时延(MB、GB、KB、B、byte、bit、Mb/s、Gb/s、b/s等)学习
文章目录 1、单位换算MB、b/s1.1 在计算机领域,大写的B、K、M、G表示1.2 在通信领域,小写的k代表的是1000,不是1024,转换的时候要注意区分 2、带宽3、时延(时间消耗)4、时延带宽积5、往返时延RTT 1、单位换算MB、b/s …...
ANN(Approximate Nearest Neighbor)搜索和索引库到底是什么?
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ ANN(Approximate Nearest Neighbor)搜索:最近邻搜索是一种在大规模数据集中快速找到与给定查询数据点距离最近的点的算法。与传统的精确最近邻搜索算法相比ÿ…...
勒索软件、供应链攻击等带来的思考!
2023年勒索软件、供应链攻击、地缘政治冲突与黑客活动主义、国家黑客间谍与APT组织活动成为网络安全的热点话题,生成式人工智能技术的武器化更是给动荡的全球网络安全威胁态势增加了不确定性、不对称性和复杂性。 即将到来的2024年,随着网络犯罪的规模化…...
【Nuxt】自定义插件和生命周期
自定义插件 方式一: app.vue // 创建插件(在app.vue中创建全局可以使用 而在某个页面中创建只有该页面可以使用) // 方式一: const nuxtApp useNuxtApp(); nuxtApp.provide("formDate", () > {return "2023-12-12"; }) nuxtAp…...
MySQL的简单介绍
文章目录 数据库关系型数据库非关系型数据”数据库的概念和用途MySQL数据库服务器、数据库和表的关系数据库的创建和删除表创建表修改常见的数据类型和约束字符串类型日期和时间类型PRIMARY KEY使用AUTO_INCREMENT使用UNIQUE使用FOREIGN KEY使用 SQL语言基础SQL语言简介SQL分类…...
leetcode 116.填充每个节点的下一个右侧结点指针
1.题目要求: 给定一个二叉树:struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。初始状态下,所有 ne…...
『 Linux 』网络基础
文章目录 协议分层OSI 七层模型TCP/IP 四层(五层)模型网络协议栈与操作系统的联系报文TCP/IP 通讯过程以太网通信的过程以太网的数据碰撞 协议分层 协议分层是计算机网络中奖网络协议进行组织和管理的方法; 通过将网络通信过程分成多个层次,每个层次负责特定的功能从而简化网络…...
Python酷库之旅-第三方库Pandas(070)
目录 一、用法精讲 281、pandas.Series.dt.daysinmonth属性 281-1、语法 281-2、参数 281-3、功能 281-4、返回值 281-5、说明 281-6、用法 281-6-1、数据准备 281-6-2、代码示例 281-6-3、结果输出 282、pandas.Series.dt.tz属性 282-1、语法 282-2、参数 282-…...
第一篇Linux介绍
目录 1、操作系统 2、Windows和Linux操作系统的区别 3、 Linux 的发行版本 4、 linux 分支 5、 Linux 的含义 6、Linux 特点 1、操作系统 常见操作系统有:Windows、MacOS、Unix/Linux。 类 UNIX Windows:其是微软公司研发的收费操作系统ÿ…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
