curl命令详解

news/2024/7/24 11:21:12

##curl命令详解
curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。
它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。
如果在一个curl命令中不指定具体的方法,那么默认的就是使用GET方法。对于其它的方法,可以在curl命令中指定:
在这里插入图片描述

语法: curl [option] [url]
常用选项:

-A/--user-agent <string>             设置用户代理发送给服务器
-b/--cookie <name=string/file>    	 cookie字符串或文件读取位置
-c/--cookie-jar <file>               操作结束后把cookie写入到这个文件中
-C/--continue-at <offset>            断点续转
-D/--dump-header <file>              把header信息写入到该文件中
-e/--referer                         来源网址
-f/--fail                            连接失败时不显示http错误
-o/--output                          把输出写到该文件中
-O/--remote-name                     把输出写到该文件中,保留远程文件的文件名
-r/--range <range>                   检索来自HTTP/1.1或FTP服务器字节范围
-s/--silent                          静音模式。不输出任何东西
-T/--upload-file <file>              上传文件
-u/--user <user[:password]>          设置服务器的用户和密码
-w/--write-out [format]              什么输出完成后
-x/--proxy <host[:port]>             在给定的端口上使用HTTP代理
-#/--progress-bar                    进度条显示当前的传送状态
-X                                   用来指定请求方式

curl支持协议:

cURL支持的通信协议有:
FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。

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。

##基本测试
1,基本用法:
curl www.baidu.com 执行之后,会直接返回访问的默认主页hitml文件内容,

2,保存访问网页:

    curl http://www.baidu.com >> baidu.html

3,-A 参数,指定客户端的用户代理头也就是 user-agent ,curl默认用户的代理字符串是curl/[version],用来标识自己使用的os类型,cpu类型,浏览器版本,以及其他标识等等.所以可以用来模拟浏览器发送请求.

$ curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com 
用来模拟出浏览器访问的情况,
也可以通过-H参数直接指定标头,更改User-agent,
$ curl -H 'User-Agent: php/1.0' https://google.com

4,-b向服务器发送cookie:

$ curl -b 'foo=bar' https://google.com 命令会发送一个cookie:foo=bar,可以用来验证cookie信息.
一个-b后面只能跟一个cookie段. 
$ curl -b cookies.txt https://www.google.com 上面命令读取到本地cookie.txt里面存放cookie信息, 将其发送到服务器端, 

5, -c 保存cookie
-c参数将服务器设置的cookie写入一个文件中,

$ curl -c cookies.txt https://www.google.com
将服务器的http回应设置cookie写入文本文件中.

6,-d发送POST请求的数据体
-d用于放post请求,

curl -d 'login=wcp&password=123' url
使用了-d参数以后,HTTP请求会自动加上标头:"content-type: application/x-www-form-urlencoded" 并且会自动将请求转换为post方法,因此可以省略-X post 
-d参数还可以读取本地文本文件的数据向服务器端发送.
curl -d "@data.txt" url 
上面命令读取的data.txt文件的内容,作为数据体向服务器发送,
--data-urlencode自动发送的数据进行url编码,等同于-d,发送post请求的数据体,区别在于会自动的将发送的数据进行url编码.
$ curl --data-urlencode 'comment=hello world' https://google.com/login

7,-e设置http标头的请求的来源
用来设置http标头refer,表示请求的来源

curl -e 'https://google.com?q=example' https://www.example.com
上面的命令将refer标头设置称为了https://google.com?q=example
-H参数可以通过直接添加标头refer,
与上面的区别在于,-e是给的之前的http地址,而-H是写入的refer
curl -H 'Referer: https://google.com?q=example' https://www.example.com

8,-F 上传二进制文件:
用来向服务器上传二进制文件,

$ curl -F 'file=@photo.png' https://google.com/profile

这种方式会给http请求加上标头,Content-Type:multipart/form-data,然后将文件photo.png作为file字段上传,
-F也可以指定MIME类型,也可以指定文件名,

$ curl -F 'file=@photo.png;filename=me.png' https://google.com/profile

上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png。

9,-G构造URL的查询字符串
-G参数是用来构造URL的查询字符串,

$ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search

这个命令会发出一个get请求,有搜索功能,真实的请求url是: https://google.com/search?q=kitties&count=20
如果省略了-G 则是一个post请求. 这里需要注意url的访问格式,

-H指定HTTP请求的标头:

$ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com

下面命令添加 HTTP 请求的标头是Content-Type: application/json,然后用-d参数发送 JSON 数据。

$ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login

也可以设置user-agent绕过服务器检测

curl -H'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:69.0) Gecko/20100101 Firefox/69.0'

-i显示response头信息,并打印源码
在这里插入图片描述

返回显示了response头信息内容:
Accept-Ranges: bytes 表示该资源支持byte形式资源返回请求,
Cache-Control: 表示对缓存的控制
Connection: keep-alive 表示连接方式
Content-Length: 2381 表示响应的数据长度,
Pragma: 在请求/响应链附近的一些参数
server: 服务器名称
其他参数信息参考: https://blog.csdn.net/jiang7701037/article/details/98961006

-I参数,是直接返回response头,不打印源码.

-K跳过ssl检测:

$ curl -k https://www.example.com

-L指定HTTP请求跟随服务器的重定向,curl命令默认不会跟随重定向

$ curl -L -d 'tweet=hi' https://api.twitter.com/tweet

–limit-rate 限制HTTP请求和回应的带宽,模拟慢网速的情况

curl --limit-rate 1K www.baidu.com 

模拟慢网速下文件加载的情况,

-o 服务器的响应保存成文件,

curl -o example.html www.baidu.com

-O 将url的最后部分当做文件名称保存

$ curl -O https://www.example.com/foo/bar.html

上面命令将服务器回应保存成文件,文件名为bar.html。

-s不输出错误和进度信息,如果不发生错误则正常显示
如果想让curl不产生输出,可以使用:

curl -s -o /dev/null www.baidu.com 命令行窗口不会回显信息.

-u 设置服务器认证的用户名和密码: 
```bash
$ curl -u 'bob:12345' https://google.com/login

上面命令设置用户名为bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym9iOjEyMzQ1。
curl 能够识别 URL 里面的用户名和密码。

-v 输出通信的整个过程,通常用于调试查看,

-x指定HTTP请求代理,

$ curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com
如果没有指定代理协议,默认是http协议,
-x指定代理可用于绕过ip检测
curl -x 127.0.0.1:8080 http://www.baidu.com

-X 用于指定HTTP请求的方法
```bash
curl -X post www.baidu.com

HTTP常见的请求方式:
在这里插入图片描述

1,get方法
用于使用给定的URL从给定服务器中检索信息,即是从指定资源中请求数据,使用get方法的请求只是检索数据,并且不应对数据产生其他影响.不对服务端数据做出任何更改操作,get请求方法将参数加在url后面,这样是不安全的,get请求本身不对HTTP协议限制url的大小.但不同的浏览器会进行限制.
2,post请求方式
post方法主要是用来传输实体的主体,可能向服务端提交信息,有可能会更新资源,post请求是对数据传输进行加密相比get方式更加安全.
两者的主要区别:
1、get请求一般用来请求获取数据

  post请求一般作为发送数据到后台,传递数据,创建数据

2、get请求也可以传参到后台,但是传递的参数则显示在地址栏,安全性低,且参数的长度也有限制(2048字符)

  post请求则是将传递的参数放在request body中,不会在地址栏显示,安全性比get请求高,参数没有长度限制

3、get请求刷新浏览器或者回退没有影响
post则会重新请求一遍,
4.get请求会被缓存,也会保留浏览器的历史记录
post请求不会被缓存,也不好保留在浏览器的历史记录中
5,get请求通常是通过url地址请求
post常见的则是form表单的请求,
6,get请求产生一个tcp数据包
post产生两个tcp数据包
7,get产生的url地址可以被bookmark(打书签)
post方式则不行
8,get请求会被浏览器主动cache
而post不会,除非手动设置,
9,对参数类型,get只接受ASCLL字符,而post没有限制
10、get比post更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
特别注意: 对于get方式,浏览器会把http head和data 一并发送,
而post方式,是先发送head部分,服务器响应后,在发送data数据.
3,put方式
将数据发送到服务器端已创建或更新资源,主要用来上传文件,
4,HEAD请求
HEAD请求主要用来获取报文首部,和get请求类似,但只返回请求的有效性及资源的更新日志等,用来获取报文头
5,DELETE请求
delete方法主要是用来删除某个资源,该方法也不带认证机制,所以一般的网站并不会对它开放使用
6,options请求
options方法用来查询,请求的指定资源都支持什么http方法.也可以用来发送测试请求.
7,connect请求
connect方法用来建立到给定的url标识的服务器隧道,它通过简单tcp/ip隧道更改请求连接,通常使用解码http代理来进行ssl编码的通信.
8,trace请求
trace方法用于沿着目标资源的路径执行消息环回测试,它回应收到请求,它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。

常见参数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考文档:
https://www.cnblogs.com/leizia/p/16322061.html


http://www.niftyadmin.cn/n/2987.html

相关文章

全年冲刺200万辆!座舱域控制器进入「软硬升级」周期

随着座舱智能化落地进程加速&#xff0c;传统分布式多ECU架构向域控制器集成的前装市场正在加速。 从车企的技术演进来看&#xff0c;新一代主流电子电气架构将普遍采用中央超算&#xff08;C-DCU&#xff09;区域控制&#xff08;Z-DCU&#xff09;的硬件架构&#xff0c;其中…

JavaScript 基础语法

目录 一、了解JavaScript 二、和 HTML 的结合方式 三、语法 alert console.log 输出控制台 var / let 定义变量 number 数字类型&#xff1a; String 字符串&#xff1a; boolean 类型 undefine 无定义的 null 空 和 && 和 || 四、数组 1. 创建数组 2. 获取数组元…

Python | GUI | Tkinter - 2. 组件使用

本文给出 Tkinter 组件使用的示例。 Update: 2022 / 11 / 2 Python | GUI | Tkinter - 2. 组件使用属性值设定及获取界面Label背景色示例按钮 (Button) 绑定事件Entry获取内容示例插入内容清除内容数学运算Text获取内容示例获取外部输入内容获取内部输出内容清除内容示例标签示…

自动驾驶 - 滤波算法

自动驾驶 - 滤波算法 目前比较常用的滤波算法有&#xff1a; 平均值滤波算法 中位值滤波算法 一阶滤波算法 卡尔曼滤波算法 1. 平均值滤波算法 1.1. 算法介绍 平均值滤波算法是比较常用&#xff0c;也比较简单的滤波算法。在滤波时&#xff0c;将N个周期的采样值计算…

Vue基础语法(五)

目录 一、插槽 1、格式 2、内容 3、原理 二、具名插槽 1、定义 2、步骤 三、作用域插槽 1、使用前提 2、作用 3、步骤 四、子组件向父组件通信总结 1、三步骤 2、多参数传递例子 一、插槽 1、格式 放在子组件 <slot>内容</slot> 2、内容 可以放任何模…

【MySQL高级篇】一文带你吃透数据库和表的操作之DDL|实战案例详解

前一篇文章是数据库系统的基础概念和MySQL的入门篇&#xff0c;SQL是一种操作关系型数据库的结构化查询语言。总的来说&#xff0c;SQL分为四大类&#xff0c;分别是数据定义语言DDL&#xff0c;数据操作语言DML&#xff0c;数据查询语言DQL和数据控制语言DCL。今天这篇文章将详…

SpringBoot统一返回处理出现cannot be cast to java.lang.String异常

SpringBoot统一返回处理出现cannot be cast to java.lang.String异常一 问题出现背景&#xff1a;二 解决方案三 异常原因分析原因&#xff1a;源码详细分析&#xff1a;正常返回&#xff1a;返回为字符串异常一 问题出现背景&#xff1a; 在使用RestControllerAdvice和实现Re…

Python爬虫之Js逆向案例(13)-某乎最新x-zse-96的rpc方案后续

Python爬虫之Js逆向案例(13)-某乎最新x-zse-96的rpc方案后续声明&#xff1a;某乎加密逆向分析仅用于研究和学习&#xff0c;如有侵权&#xff0c;可联系删除大家好&#xff0c;这篇文章是鉴于《案例7》的后续内容&#xff0c;如果没有看过案例7 的小伙伴可翻到本篇文章下方查看…