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、上传文件
- FTP:
curl -T test1.jpg -u 用户名:密码 ftp://www.linux.com/img/
- 表单上传文件: -F/–form
相当于设置form表单的method="POST"和enctype='multipart/form-data’两个属性
curl --form “fileupload=@filename.txt” http://hostname/resource
3.1.6、内容输出
- 获取服务器内容,默认将输出打印到标准输出中(STDOUT)中。
curl https://curl.se
- debug场景中,通过 -v参数可以看到详细解析过程
curl -v https://curl.se/
3.2 、利用curl测试接口
- 常用的测试命令为:
curl -v -X POST -H "Content-Type: application/json" http://127.0.0.1:8080/user -d'{"username":"admin","password":"xxxxxx"}'
- 测试get请求
curl URL
URL -O 文件绝对路径
curl http://www.linuxidc.com/login.cgi?user=test&password=123456
- 测试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
- 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代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…...

Linux - 进程控制(创建和终止)
1.进程创建fork函数初识 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:子进程返回0,父进程返回子进程id,出错返回-1getpid()获取子进程id,…...

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

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

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

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

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

【C++】一篇带你搞懂C++“引用”
前言在C语言的学习中,并没有引用这个概念,但是在C中,加入了引用这个概念,说明引用也是很重要的,但是我们怎么理解引用呢?我是这么理解的,例如在水浒传中,108个英雄好汉都是自己的外号…...

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

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

【三维几何学习】从零开始网格上的深度学习-3:Transformer篇(Pytorch)
本文参加新星计划人工智能(Pytorch)赛道: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]时使用: int b…...

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

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

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

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

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

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

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

【Java】i++和++i的实现原理
文章目录 i++案例反编译分析扩展 x = x++我们接下来从字节码层面分析: 不了解字节码的可以参考这篇:【精通JVM】字节码指令全解 i++案例 package org.example;public class Main {public static void main...

第十四届蓝桥杯三月真题刷题训练——第 18 天
目录 第 1 题:排列字母 问题描述 运行限制 代码: 第 2 题:GCD_数论 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 3 题:选数异或 第 4 题:背包与魔法 第 1 题&#x…...

软件测试拿了几个20K offer,分享一波面经
1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己,不断…...

spring2
1.Spring配置数据源1.1 数据源(连接池)的作用 数据源(连接池)是提高程序性能如出现的事先实例化数据源,初始化部分连接资源使用连接资源时从数据源中获取使用完毕后将连接资源归还给数据源常见的数据源(连接池):DBCP、C3P0、BoneC…...

【Linux】网络编程套接字(中)
🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…...

手撕数据结构—队列
队列队列的话只允许在一端插入,在另外一端删除。插入数据的那一段叫做队尾,出数据的那一段叫做队头(从尾巴插入)。因此的话队列是先进先出的。入的顺序与出的顺序的话是一样的。这个与栈是不一样的,因为栈的话就是说如…...

gdb调试工具和makemakefile工具
gdb调试工具和make/makefile工具 文章目录gdb调试工具和make/makefile工具一、gdb调试工具1.debug/release2.使用二、make/makefile1.什么是make/makefile2.编写一、gdb调试工具 1.debug/release 程序有两种默认的发布方式debug和release。release是无法进行调试的。Linux中g…...

【进阶数据结构】平衡搜索二叉树 —— AVL树
🌈感谢阅读East-sunrise学习分享——[进阶数据结构]AVL树 博主水平有限,如有差错,欢迎斧正🙏感谢有你 码字不易,若有收获,期待你的点赞关注💙我们一起进步🚀 🌈我们上一篇…...

ROS使用(5)action学习
action消息的构建 首先进行功能包的创建 mkdir -p ros2_ws/src cd ros2_ws/src ros2 pkg create action_tutorials_interfaces action消息的类型 # Request --- # Result --- # Feedback 动作定义由三个消息定义组成,以---分隔。 从动作客户机向动作服务器发送…...

2023前端面试题集(含答案)之HTML+CSS篇(一)
在又到了金三银四的招聘季,不管你是刚入行的小白,亦或是混迹职场的老鸟,还在为面试前端工程师时不知道面试官要问什么怎么回答而苦恼吗?为了帮助你获得面试官的青睐,顺利通过面试,跳槽进入大厂,…...