Linux工具之curl

本文详细介绍了Linux工具curl的使用,包括设置请求方法、POST数据、HTTP头部、Refer、用户代理、跟踪跳转和cookie的管理。通过实例展示了如何利用curl进行资源下载、查看本机外网IP、获取远程主机IP及检查URL状态码等操作,是学习和使用curl的实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux工具之curl

curl是一个利用url规则在命令行下工作的文件传输工具,它支持文件的上传和下载,在测试一些RESTful接口的时候也会经常用到,因此非常有必要了解它的使用。

用法

下载
大部分操作系统内置了curl工具,因此安装部分笔记不作过多说明。
下载之后使用curl --help命令查看安装情况和使用说明。

使用

我使用wiresharks来抓取curl发送的http数据包来学习curl,笔记暂时只涉及http协议,https协议部分TODO

目录:

简单使用

curl <url>

默认使用GET方法,请求url,默认代理,测试抓取baidu首页并展示wiresharks抓取结果如下:
curl执行结果
在这里插入图片描述
wiresharks抓取结果
在这里插入图片描述
可以看到curl默认设置Host、User-Agent、Accept,其中User-Agent默认为curl+版本号。

设置请求方法

HTTP有多种请求方法,常见的有GET、POST、PUT、DELETE,在curl中使用-X(大写X)选项设置,默认为GET。

curl -X GET    <url>
curl -X POST   <url>
curl -X PUT    <url>
curl -X DELETE <url>

GET
在这里插入图片描述
在这里插入图片描述

POST
在这里插入图片描述
在这里插入图片描述

PUT
baidu主页不支持PUT所以返回错误代码。
在这里插入图片描述
在这里插入图片描述

DELETE
baidu主页不支持DELETE所以返回错误代码。
在这里插入图片描述
在这里插入图片描述

POST数据

当我们需要使用POST方法时,往往会需要传输数据,curl使用-d参数设置输入数据。

curl -d "name1=value1&name2=value2" <url>
curl -H "Content-type: application/json" -d '{"name1": "value1", "name2": "value2"}' <url>

第一种方法
在这里插入图片描述
在这里插入图片描述

第二种方法
在这里插入图片描述
在这里插入图片描述
可以看到两种方法的content-type是不一样的,一般来说,第一种方法用于添加url参数,第二种方法用于POST添加body,两种方式是有区别的。并且如果需要添加带列表的对象,建议采用第二种方式。

设置HTTP请求头部

在上一节填写POST数据时第二种方式使用-H参数添加了一个头部,其它头部信息也可以按照这种方式添加:

curl -H 'key: value' <url>

Example
在这里插入图片描述
在这里插入图片描述

查看HTTP头部

使用-i参数可以查看响应头部信息,也可以使用-I-v参数。

curl -i <url> #head 和 body
curl -I <url> #只有head
curl -v <url> #请求和响应的head 和 body

测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第三种方式可以查看请求和响应的头部,使用wiresharks对比两个头部:
在这里插入图片描述
在这里插入图片描述
两个头部是一样的,因此可以使用curl直接查看http请求和响应。

设置Refer

在http的head中,refer常常会被服务器检查是否是盗链,比如某一个页面A,它只有一个入口页面B,只能允许通过这个入口进来,但是由于可能有人通过自制的页面,点击页面A的链接转到A来,那么为了能够监测这种情况,在从B点击链接进入A的时候,会在request里添加一个Refer,其值为B,表示这个请求是从页面B发出的。curl也支持设置Refer,来下载一些有防盗链措施的文件。

curl -e <referUrl> <url>

Example
在这里插入图片描述
在这里插入图片描述

设置用户代理

默认curl代理是curl本身,有些站点会对一些小型代理进行限制,因此,在请求一些资源的时候我们需要模拟成一些大型用户代理,比如Chrome、Safari等等。

curl -A <user-agent> <url>

Example
在这里插入图片描述
在这里插入图片描述

跟踪跳转

有些url会通过设置response head来指向另一个url,http_code会设置为30X,浏览器一般会自动跳转到新的url获取数据,这个过程对用户透明,因此我们感觉不到这个现象;但是curl默认是单个请求,因此连接一次之后就不再进行,这时候用户会获取不到访问数据,但是可以设置跟踪跳转实现获取跳转之后对页面。

之前的示例访问baidu.com可以发现返回的http状态码是302,这表明这并不是资源的目标地址,因此我们想要获取baidu.com首页实际内容,可以使用-L参数。

curl -L <url>

Example
在这里插入图片描述
在这里插入图片描述
在终端执行了curl -L baidu.com -v之后,可以观察到输出中包含有两次请求,第一次请求中head里边有Location选项,第二次请求会请求这条地址获取实际资源内容,如果第二条资源依旧是跳转,那么curl会再次发送请求。

cookie的保存和使用

由于http是一个无状态的协议,而跟踪用户行为是当前各大移动应用都需要关心的事情,比较常见的方式就是适用cookie。我们在初次访问一个网站的时候,网站会返回一个cookie,在http的head里边,浏览器自动帮我们保存了这个cookie,之后再次访问这个网站的时候浏览器会带上这个cookie,附加在请求的head里边。
我们先测试正常浏览器访问的时候的cookie:
请求baidu首页
在这里插入图片描述
可以看到在response里边附加了baidu服务器返回给我们的cookie,我们可以尝试点击某个链接然后查看request里边的cookie。
点击baidu首页子页面
在这里插入图片描述
可以看到response的cookie现在被添加到request里边了。

#保存本次请求响应中的cookie到<cookie-file>里
curl -c <cookie-file> <url>

#使用cookie-file发起本次请求
curl -b <cookie-file> <url>

#使用cookie-string发起本次请求
curl -b <cookie-string> <url>

Example
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
两种方式都可以设置请求cookie,按照需求选择即可。

常用功能

下载资源
#下载百度首页logo
#-o参数指定输出文件路径
#也可以使用-O大写,表示按照资源本身名字命名,不需要参数
curl -o logo.jpg https://www.baidu.com/img/bd_logo1.png
#curl -O https://www.baidu.com/img/bd_logo1.png
查看本机外网ip

本地局域网ip可以在终端下执行ifconfig查看,但是看不到自己的外网ip。

curl icanhazip.com

Example
在这里插入图片描述

查看远程主机ip
curl -o /dev/null -s -w %{remote_ip} <url>

Example
在这里插入图片描述

查看url请求状态码
curl -o /dev/null -s -w %{http_code} <url>

Example
在这里插入图片描述

结尾

curl是一个非常优秀的工具,不仅仅是上边提到的功能,它还有很多灵活的选项来满足我们在终端下的各种需求。可以通过man curlcurl --help查看更多的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值