当前位置: 首页 > 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…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

数据挖掘是什么?数据挖掘技术有哪些?

目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...