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

Linux- 系统随你玩之--玩出花活的命令浏览器-双生姐妹花

在这里插入图片描述

文章目录

  • 1、背景
  • 2、命令浏览器-双生姐妹花
    • 2.1、姐妹花简介
    • 2.2 、验名正身
    • 2.3、常用功能选项
  • 3、常用实操
    • 3.1、发送请求获取文件
      • 3.1.1、抓取页面内容到一个文件中
      • 3.1.2、多个文件下载
      • 3.1.3、下载ftp文件
      • 3.1.4、断点续传
      • 3.1.5、上传文件
      • 3.1.6、内容输出
    • 3.2 、利用curl测试接口
    • 3.3 、模拟登录相关
      • 3.3.1、cookie
      • 3.3.2、设置代理字符串
      • 3.3.3、 加密与认证
      • 3.3.4、域名解析
      • 3.3.4、 301、302
  • 4、结语

1、背景

前文在续,书接上一回Linux- 系统随你玩之–玩出花活的命令浏览器下,玩出花活的命令浏览器有个双生姐妹花,今天我们就请它闪亮出场 。

2、命令浏览器-双生姐妹花

2.1、姐妹花简介

curl是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。在那个视窗还没流行的黑暗时代,它是一个用于传输数据的命令行工具与库,同时它支持文件上传和下载。

curl(客户端URL)是一个开放源代码的命令行工具,还包含了用于程序开发的跨平台的库(libcurl),用于在服务器之间传输数据,并分发给几乎所有新的操作系统。
curl编程用于需要通过Internet协议发送或接收数据的几乎任何地方。
curl命令使用了libcurl库来实现,libcurl库经常用在C程序中用来处理HTTP请求,curlpp是libcurl的一个C++封装,这几个东西可以用在抓取网页、网络监控等方面的开发,而curl命令可以帮助来解决开发过程中遇到的问题。

2.2 、验名正身

我们可以通过curl的官方网站获取该工具的最新版本,以及最全面的使用方法。

https://curl.haxx.se/

在这里插入图片描述
它的开源代码存放在:github

https://github.com/curl/curl
在这里插入图片描述

从官方我们可以知道curl支持以多种方式检索和发送数据,并输出到标准输出,可以无缝衔接标准unix管道使用。在绝大多数的*nix操作系统上都默认安装。

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还支持SSL认证、HTTP POST、HTTP PUT、FTP上传, HTTP form based upload、proxies、HTTP/2、cookies、用户名+密码认证(Basic, Plain, Digest,CRAM-MD5, NTLM, Negotiate and Kerberos)、file transfer resume、proxy tunneling。

curl设计为无用户交互下完成工作;curl提供了一大堆非常有用的功能,包括代理访问、用户认证、ftp上传下载、HTTP POST、SSL连接、cookie支持、断点续传…。

2.3、常用功能选项

语法格式:

curl [option] [url]

参数选项:

-A:随意指定自己这次访问所宣称的自己的浏览器信息
-A/–user-agent 设置用户代理发送给服务器
-b/–cookie <name=string/file> cookie字符串或文件读取位置
    - basic 使用HTTP基本验证
-B/–use-ascii 使用ASCII /文本传输
-c/–cookie-jar 操作结束后把cookie写入到这个文件中
-C/–continue-at 断点续转
-d/–data HTTP POST方式传送数据
     --data-ascii 以ascii的方式post数据
    --data-binary 以二进制的方式post数据
     --negotiate 使用HTTP身份验证
    --digest 使用数字身份验证
    --disable-eprt 禁止使用EPRT或LPRT
    --disable-epsv 禁止使用EPSV
-D/–dump-header 把header信息写入到该文件中
-e/–referer 来源网址
-f/–fail 连接失败时不显示http错误
-F/–form <name=content> 模拟http表单提交数据
-g/–globoff 禁用网址序列和范围使用{}和[]
-h/–help 帮助
-H/–header 自定义头信息传递给服务器
    --ignore-content-length 忽略的HTTP头信息的长度
-I/–head 仅返回头部信息,使用HEAD请求
-m/–max-time 指定处理的最大时长
-o/–output 指定输出文件名称
   --retry 指定重试次数
-O/–remote-name 把输出写到该文件中,保留远程文件的文件名
-r/–range 检索来自HTTP/1.1或FTP服务器字节范围
-s/–silent 减少输出的信息,比如进度
   --connect-timeout 指定尝试连接的最大时长
-T/–upload-file 上传文件
-u/–user <user[:password]> 设置服务器的用户和密码
-v/–verbose 输出详细的返回信息
-w/–write-out [format] 什么输出完成后
-x/–proxy <host[:port]> 在给定的端口上使用HTTP代理
-#/–progress-bar 进度条显示当前的传送状态
-X/–request 指定什么命令
-y/–speed-time 放弃限速所要的时间。默认为30
-Y/–speed-limit 停止传输速度的限制,速度时间’秒

3、常用实操

3.1、发送请求获取文件

3.1.1、抓取页面内容到一个文件中

通过-o/-O选项保存下载的文件到指定的文件中:
-o:将文件保存为命令行中指定的文件名的文件中
-O:使用URL中默认的文件名保存文件到本地(注意后面的url要具体到某个文件,不然抓不下来。还可以配合使用正则来抓取)

curl -o index.html http://www.baidu.com --将百度首页内容抓取到 index.html中
curl -O index.html http://www.baidu.com
在这里插入图片描述

3.1.2、多个文件下载

A. 使用多个-O可以同时获取多个文件内容。若同时从同一站点下载多个文件时,curl会尝试重用链接。
B. 使用循环下载
有时候下载图片可以能是前面的部分名称是一样的,就最后的文件名末尾名不一样。这样就会把test1,test2,test3全部保存下来.
    curl -O http://www.linux.com/test[1-3].jpg

3.1.3、下载ftp文件

curl可以通过ftp下载文件,curl提供两种从ftp中下载的语法

curl -O -u 用户名:密码 ftp://www.linux.com/test1.jpg
curl -O ftp://用户名:密码@www.linux.com/test1.jpg

3.1.4、断点续传

断点续转,从文件头的指定位置开始继续下载/上传;offset续传开始的位置,如果offset值为“-”,
curl会自动从文件中识别起始位置开始传输;

curl -# -o centosstream8.iso -C - http://mirrors.aliyun.com/centos/8-stream/isos/x86_64/CentOS-Stream-8-20230308.3-x86_64-dvd1.iso
curl -C -O http://www.linux.com/test1.jpg

下载进度条
显示进度条(option:-#)或不显示进度条(option:-s)

curl -# -O https://i0.hdslb.com/bfs/archive/f9503413dd4ac32594bac03a4671601e21b02064.jpg
curl -s -O https://i0.hdslb.com/bfs/archive/f9503413dd4ac32594bac03a4671601e21b02064.jpg
在这里插入图片描述

3.1.5、上传文件

  1. FTP:

curl -T test1.jpg -u 用户名:密码 ftp://www.linux.com/img/

  1. 表单上传文件: -F/–form
    相当于设置form表单的method="POST"和enctype='multipart/form-data’两个属性

curl --form “fileupload=@filename.txt” http://hostname/resource

3.1.6、内容输出

  1. 获取服务器内容,默认将输出打印到标准输出中(STDOUT)中。

curl https://curl.se

  1. debug场景中,通过 -v参数可以看到详细解析过程

curl -v https://curl.se/
在这里插入图片描述

3.2 、利用curl测试接口

  1. 常用的测试命令为:
curl -v -X POST -H "Content-Type: application/json" http://127.0.0.1:8080/user -d'{"username":"admin","password":"xxxxxx"}'

在这里插入图片描述

  1. 测试get请求

curl URL
URL -O 文件绝对路径
curl http://www.linuxidc.com/login.cgi?user=test&password=123456

  1. 测试post请求

请求主体用json格式
curl -X POST -H ‘content-type: application/json’ -d @json文件绝对路径 URL
curl -X POST -H ‘content-type: application/json’ -d ‘json内容’ URL
请求主体用xml格式
curl -X POST -H ‘content-type: application/xml’ -d @xml文件绝对路径 URL
curl -X POST -H ‘content-type: application/xml’ -d ‘xml内容’ URL

curl -d “user=nickwolfe&password=12345” http://www.linuxidc.com/login.cgi

A. 发送post请求时需要使用-X选项,除了使用POST外,还可以使用http规范定义的其它请求谓词,如PUT,DELETE等

curl -XPOST url

在这里插入图片描述
B. 发送post请求时,通常需要指定请求体数据。可以使用-d或–data来指定发送的请求体。

curl -XPOST -d “queryname=leo&pageSize=10” url

C. 如果需要对请求数据进行urlencode

curl -XPOST --data-urlencode “queryname=leo&pageSize=10” url

d.发送post请求还可以考虑下面几个子选项:

–data-raw
–data-ascii
–data-binary

3.3 、模拟登录相关

3.3.1、cookie

1.保存http的response里面的 cookie 信息。
    curl -c cookiec.txt http://www.linux.com
2.保存http的response里面的 header 信息。
    curl -D cookied.txt http://www.baidu.com
3.curl可以根据旧的cookie写出新cookie并发送到网站:
    curl -b cookies.txt -c newcookies.txt www.cookiesite. com

很多网站都是通过监视你的cookie信息来判断你是否按规矩访问他们的网站的,因此我们需要使用保存的cookie信息。

curl -b cookiec.txt http://www.linux.com
curl -b “domain=linux.com” http://www.linux.com 自定义cookie内容信息

3.3.2、设置代理字符串

当我们经常用curl去访问网站上的信息,人家会把你的IP给屏蔽掉的,这个时候,我们可以用代理
#指定代理主机和端口

curl -x proxysever.test.com:3128 http://google.co.in 或
curl -x 34.xx.xx.xx:12779 -o home.html http://www.XXXX.com

  1. curl限制带宽
    curl URL --limit-rate 速度

3.3.3、 加密与认证

1. 加密HTTP
如果是通过OpenSSL加密的https协议传输的网页,curl可以直接访问:

curl https://xxxx. com

2. http认证
如果是采用证书认证的http地址,证书在本地,那么curl这样使用:

curl -E mycert.pem https://xxxx. com

3.3.4、域名解析

不需要修改/etc/hosts,curl直接解析ip请求域名
将 http://example.com 或 https://example.com 请求指定域名解析的IP为127.0.0.1
参数语法: --resolve host:port:address Force resolve of HOST:PORT to ADDRESS

curl --resolve example.com:80:127.0.0.1 http://example.com/
curl --resolve example.com:443:127.0.0.1 https://example.com/

3.3.4、 301、302

在这里插入图片描述
如访问出现301或302,curl 命令行不支持 301 或 302 的解决办法
curl -L --max-redirs 2 http://www.linux.com
-L 指令其实就是支持 location 头
–max-redirs 就是支持的重定向深度,这里指定 2,主要原因是防止进入死循环。
在这里插入图片描述

4、结语

各位看官命令浏览器-双生姐妹花curl今天就到此为止,预知此系列后事如何且听下回分解 您了!
在这里插入图片描述

相关文章:

Linux- 系统随你玩之--玩出花活的命令浏览器-双生姐妹花

文章目录1、背景2、命令浏览器-双生姐妹花2.1、姐妹花简介2.2 、验名正身2.3、常用功能选项3、常用实操3.1、发送请求获取文件3.1.1、抓取页面内容到一个文件中3.1.2、多个文件下载3.1.3、下载ftp文件3.1.4、断点续传3.1.5、上传文件3.1.6、内容输出3.2 、利用curl测试接口3.3 …...

【深度学习】基于Hough变化的答题卡识别(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。⛳座右铭&#…...

Linux - 进程控制(创建和终止)

1.进程创建fork函数初识 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。返回值&#xff1a;子进程返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1getpid()获取子进程id&#xff0c…...

依赖注入~

依赖注入之setter注入&#xff1a; 依赖注入是IOC具体的一种实现方式&#xff0c; 这是针对资源获取的方式角度来说的&#xff0c;之前我们是被动接受&#xff0c;现在IOC具体的实现叫做依赖注入&#xff0c;从代码的角度来说&#xff0c;原来创建对象的时候需要new&#xff0…...

【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程

【嵌入式硬件芯片开发笔记】HART协议调制解调芯片AD5700配置流程 XTAL_EN接地&#xff0c;CLK_CFG的两个引脚由同一个GPIO控制 初始时HART_CLK_CFG输出低电平 由RTS引脚控制调制/解调。当RTS处于高电平时&#xff0c;为解调&#xff08;输入&#xff09;&#xff1b;否则为调…...

Go语言异步下载视频

异步下载mp4视频列表 下面是一个简单的Go语言示例&#xff0c;用于异步下载视频。我们将使用goroutines来实现异步下载&#xff0c;并使用sync.WaitGroup来等待所有下载任务完成。此示例依赖于net/http包来执行HTTP请求。 package mainimport ("fmt""io"…...

前缀树(字典树/Trie) -----Java实现

目录 一.前缀树 1.什么是前缀树 2.前缀树的举例 二.前缀树的实现 1.前缀树的数据结构 1.插入字符串 2.查找字符串 3.查找前缀 三.词典中最长的单词 1.题目描述 2.问题分析 3.代码实现 一.前缀树 1.什么是前缀树 字典树&#xff08;Trie树&#xff09;是一种树形…...

​申请专利需要具备什么条件

​申请专利需要具备什么条件 在我国&#xff0c;如果创造出来了新的发明都可以申请专利权&#xff0c;一旦申请成功之后&#xff0c;自己的发明就受到了法律的保护&#xff0c;任何人不得以违法的手段进行侵犯。那么申请专利需要具备什么条件&#xff1f;今天律赢时代网就为大家…...

【C++】一篇带你搞懂C++“引用”

前言在C语言的学习中&#xff0c;并没有引用这个概念&#xff0c;但是在C中&#xff0c;加入了引用这个概念&#xff0c;说明引用也是很重要的&#xff0c;但是我们怎么理解引用呢&#xff1f;我是这么理解的&#xff0c;例如在水浒传中&#xff0c;108个英雄好汉都是自己的外号…...

蓝桥杯刷题冲刺 | 倒计时19天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.抓住那头牛2.排列序数1.抓住那头牛 题目 链接&#xff1a; 抓住那头牛 - C语言网 (dotcpp.com…...

Java每日一练(20230321)

目录 1. 出现次数最多的字符 &#x1f31f; 2. 最后一个单词的长度 &#x1f31f; 3. 两数之和 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 出现次数最多的字符并…...

【三维几何学习】从零开始网格上的深度学习-3:Transformer篇(Pytorch)

本文参加新星计划人工智能(Pytorch)赛道&#xff1a;https://bbs.csdn.net/topics/613989052 从零开始网格上的深度学习-3:Transformer篇引言一、概述二、核心代码2.1 位置编码2.2 网络框架三、基于Transformer的网格分类3.1 分类结果3.2 全部代码引言 本文主要内容如下&#…...

一、基础算法3:二分 模板题+算法模板(数的范围,数的三次方根)

文章目录算法模板整数二分算法模板浮点数二分算法模板模板题数的范围原题链接题目题解数的三次方根原题链接题目题解算法模板 整数二分算法模板 bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid 1, r]时使用&#xff1a; int b…...

Spring 源码解析 - Bean创建过程 以及 解决循环依赖

一、Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析&#xff0c;我们可以得到结论&#xff0c;资源文件中的 bean 定义信息&#xff0c;被组装成了 BeanDefinition 存放进了 beanDefinitionMap 容器中&#xff0c;那 Bean 是…...

移除元素(双指针)

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的…...

76.qt qml-QianWindow开源炫酷界面框架(支持白色暗黑渐变自定义控件均以适配)

界面介绍界面支持: 透明 白色 黑色 渐变 单色 静态图 动态图侧边栏支持:抽屉、带折叠、多模式场景控件已集成: 暗黑风格 高亮风格、并附带个人自定义控件及开源demo白色场景如下所示:单色暗黑风格如下所示:用户自定义皮肤如下所示:皮肤预览如下所示:b站入口:https://www.bilibi…...

Python生日蛋糕

目录 前言 底盘 蛋糕 蜡烛 祝福 前言 Hello&#xff0c;小伙伴们晚上好吖&#xff01;前两天博主满20岁啦&#xff08;要开始奔三辽呜呜呜&#xff09;&#xff0c;这几天收到了不少小伙伴们的祝福&#xff0c;浪漫的小博主想送给大家一份不一样的生日蛋糕&#xff0c…...

QT 如何提高 Qt Creator 的编译速度

如何提高编译速度&#xff0c;貌似是一个老生常谈的话题。对于Qter而言&#xff0c;如何提高QT Creator 的编辑速度是一直都是大家所期盼的。本文也是查阅了各路大神的方法后整理出来的&#xff0c;希望对各位有所帮助。 1、在*.pro文件添加预编译机制 QT官方给出的示例&…...

STM32之震动传感器、继电器介绍及实战

目录 一、震动传感器介绍及实战 二、编程代码实现 1、gpio.c---------初始化GPIO口引脚函数 2、调用中断服务函数 3、中断服务函数 4、中断服务回调函数 5、把上述的中断服务回调函数&#xff0c;放入main主函数里 6、结果演示 三、继电器介绍及实战 一、震动传感器介…...

RK3588平台开发系列讲解(显示篇)RK3588 平台 的DP介绍

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、功能特性二、 DP 输⼊三、DP 输出四、 代码路径沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 RK3588 平台 DP 的使⽤与调试⽅法。 一、功能特性 RK3588 的 DP ⽀持 1.4a 版本的 DP 协议,最…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...