当前位置: 首页 > news >正文

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&param2=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&param=value'

或者你可以使用 -G--get 选项来明确地指定 GET 请求,并使用 -d--data 来添加参数:

curl -G 'http://example.com/' -d 'q=query+string' -d 'param=value'

设置请求头

你还可以设置自定义的 HTTP 头部信息,例如设置 User-AgentAccept

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&param2=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&param2=value2" \http://example.com/api

使用代理

如果你需要通过代理服务器发送 POST 请求,可以使用 -x--proxy 选项:

curl -X POST \-x proxy.example.com:8080 \-d "param1=value1&param2=value2" \http://example.com/api

附加认证

如果 API 需要基本认证,你可以使用 -u--user 选项来提供用户名和密码:

curl -X POST \-u "username:password" \-d "param1=value1&param2=value2" \http://example.com/api

限制请求时间

如果你想限制整个请求的最大时间,可以使用 -m--max-time 选项:

curl -X POST \-m 10 \-d "param1=value1&param2=value2" \http://example.com/api

这里的 10 表示 10 秒。

相关文章:

Curl工具小记

curl 是一个非常强大且灵活的命令行工具&#xff0c;用于获取或发送数据&#xff0c;无需用户图形界面交互。它支持多种协议&#xff0c;并且可以在脚本中使用&#xff0c;以实现自动化任务。 基本介绍 curl 是 “Client URL” 的缩写&#xff0c;它是一个利用 URL 语法在命令…...

【C#语音文字互转】C#语音转文字(方法一)

Whisper.NET开源项目&#xff1a;https://github.com/sandrohanea/whisper.net/tree/main 一. 环境准备 在VS中安装 Whisper.net&#xff0c;在NuGet包管理器控制台中运行以下命令&#xff1a; Install-Package Whisper.net Install-Package Whisper.net.Runtime其中运行时包…...

基于Linux系统下的在线手机商城

项目背景 随着网络的发展&#xff0c;电子商务的兴起和普及使得消费者越来越倾向于通过互联网购买商品和服务&#xff0c;越来越多的传统零售商和新兴企业转向在线销售以满足消费者的需求&#xff0c;个成功的在线商城项目背景包括对市场需求、竞争环境、技术和平台选择、商业…...

Apache Kafka 事务详解

Apache Kafka 事务详解 Apache Kafka 是一个分布式流处理平台&#xff0c;主要用于实时数据的传输和处理。在现代的数据密集型应用中&#xff0c;事务性保证在数据传输和处理中的作用至关重要。本文将详细介绍 Kafka 的事务性支持&#xff0c;包括其基本概念、架构、使用方法以…...

Go语言 结构体

本文主要为Go语言 结构体介绍、语法、使用注意及其示例。 目录 结构体 语法 语法示例 语法说明 声明使用 创建并赋值 使用指针 使用注意 总结 结构体 C语言里面&#xff0c;我们可以使用typedef in MyInt。 在go语言中使用结构体来模拟类&#xff0c;使用type stru…...

数据结构(邓俊辉)学习笔记】词典 03—— 排解冲突(1)

文章目录 1. 一山二虎2. 泾渭分明3. 开放定址4. 线性试探5. 赖惰删除 1. 一山二虎 此前我们已经多次指出&#xff0c;对于需要动态维护的散列表冲突是不可避免的&#xff0c;无论你的散列函数设计的有多么精妙&#xff0c;因此我们不得不回答的第二个重要问题就是一旦发生冲突&…...

HTML5+CSS3-HTML5入门

1.web标准 W3C为web标准化做出了以下事项&#xff0c;主要包括结构&#xff0c;表现和行为。 结构用于对网页的信息进行分类和整理&#xff0c;使用技术包括HTML,XML,XHTML 表现指网页的外在样式&#xff0c;一般包括网页的版式&#xff0c;颜色&#xff0c;字体&#xff0c…...

谷粒商城实战笔记-138-商城业务-首页-渲染二级三级分类数据

本节的主要内容是在前一节的基础上&#xff0c;提供结构查询出所有的二级、三级分类数据。 一&#xff0c;构造响应体数据结构 后端返回给前端的数据结构是在开发详细设计中应该确定的内容。 分析前端需要的数据结构&#xff0c;后端要将所有一级分类包含的二级和三级分类信…...

git的基础用法

文章目录 前言关联仓库提交代码分支操作账号免密 前言 记录一下git的一些基础用法。 关联仓库 # 初始化 git init# 关联仓库 git remote add origin <仓库地址># 查看当前关联的仓库 git remote -v# 一次只能remote一个&#xff0c;要换需要先删原来的 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-学习笔记

动态授权加入的成员优先级高于静态绑定的成员&#xff1b; any组&#xff08;缺省&#xff09;&#xff1a;所有用户或资源&#xff0c;通常用来配置默认规则。any组只能做目的组&#xff0c;不支持配置为源组。 同一个安全组既可以与多条授权规则绑定来表示动态用户&#xff0…...

【计算机网络】性能指标-带宽和时延(MB、GB、KB、B、byte、bit、Mb/s、Gb/s、b/s等)学习

文章目录 1、单位换算MB、b/s1.1 在计算机领域&#xff0c;大写的B、K、M、G表示1.2 在通信领域&#xff0c;小写的k代表的是1000,不是1024&#xff0c;转换的时候要注意区分 2、带宽3、时延&#xff08;时间消耗&#xff09;4、时延带宽积5、往返时延RTT 1、单位换算MB、b/s …...

ANN(Approximate Nearest Neighbor)搜索和索引库到底是什么?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ ANN&#xff08;Approximate Nearest Neighbor&#xff09;搜索&#xff1a;最近邻搜索是一种在大规模数据集中快速找到与给定查询数据点距离最近的点的算法。与传统的精确最近邻搜索算法相比&#xff…...

勒索软件、供应链攻击等带来的思考!

2023年勒索软件、供应链攻击、地缘政治冲突与黑客活动主义、国家黑客间谍与APT组织活动成为网络安全的热点话题&#xff0c;生成式人工智能技术的武器化更是给动荡的全球网络安全威胁态势增加了不确定性、不对称性和复杂性。 即将到来的2024年&#xff0c;随着网络犯罪的规模化…...

【Nuxt】自定义插件和生命周期

自定义插件 方式一&#xff1a; app.vue // 创建插件(在app.vue中创建全局可以使用 而在某个页面中创建只有该页面可以使用) // 方式一&#xff1a; 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.题目要求: 给定一个二叉树&#xff1a;struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 NULL 。初始状态下&#xff0c;所有 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、操作系统 常见操作系统有&#xff1a;Windows、MacOS、Unix/Linux。 类 UNIX Windows&#xff1a;其是微软公司研发的收费操作系统&#xff…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...