curl命令学习

curl 是一个功能强大的命令行工具,用于在网络上传输数据,支持多种协议(HTTP、HTTPS、FTP、SFTP、SCP、SMTP 等)。它被广泛用于测试 API、下载文件、调试网络请求等场景。

一、快速索引卡

用途

命令

GET请求

curl "url?key=val"

POST表单

curl -X POST -d "key=val" url

POST的JSON

curl -X POST -H "Content-Type: application/json" -d '{}' url

修改User-Agent

curl -A "自定义UA" url

添加Cookie

curl -b "name=value" url

查看详情

curl -v url

二、相关知识点

1.GET请求

# 基础
curl http://httpbin.org/get
  • curl:一个发出 HTTP 请求的命令行工具
  • http://httpbin.org/get:请求的目标 URL
    • httpbin.org:专门用于 HTTP 测试的公开服务
    • /get:该服务的 API 端点,会返回你请求中的各种信息

curl 默认发出 GET 请求,访问了 http://httpbin.org/get,服务器把收到的请求信息(即你发出的请求包)原样返回给你。

{
  "args": {},
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/8.18.0",
    "X-Amzn-Trace-Id": "Root=1-69f491a4-19b5df83372bc5ca211d316b"
  },
  "origin": "XX.XX.XX.Xx",
  "url": "http://httpbin.org/get"
}
1."args": {}
  • 含义:URL 中的查询参数(Query String)
  • 示例:如果你请求 http://httpbin.org/get?name=张三&age=25,这里会变成 "args": {"name": "张三", "age": "25"}
  • 目前为空:因为你请求时没有带 ?key=value 这样的参数
2. "headers": { ... }

这是 httpbin 从你的请求中收到的 HTTP 请求头(不是你收到的响应头,而是它看到的你发来的请求头)。

- "Accept": "*/*"
  • 告诉服务器:客户端能接受任何类型的响应内容
  • */* 表示任意 MIME 类型(文本、图片、视频等)
- "Host": "httpbin.org"
  • 必选头,指明要访问的服务器域名(因为一台服务器可能托管多个网站)
  • 这里表示你请求的主机名是 httpbin.org
- "User-Agent": "curl/8.18.0"
  • 标识客户端的类型和版本
  • 服务器知道你用了 curl 8.18.0(而不是浏览器)
  • 网站可以据此返回不同内容(如给手机浏览器返回手机版页面)
- "X-Amzn-Trace-Id": "Root=1-69f491a4-19b5df83372bc5ca211d316b"
  • 这是一个 非标准自定义头(以 X- 开头)
  • 看起来是 httpbin 运行在 AWS(亚马逊云)上,AWS 负载均衡器自动添加的追踪 ID
  • 用于调试、追踪请求在云环境中的完整路径
    • 1:版本
    • 69f491a4:时间戳相关的十六进制
    • 后面的部分:唯一请求标识
3. "origin": "XX.XX.XX.XX"
  • 这是 服务端看到的你的公网 IP 地址
  • 也就是你的请求从哪个 IP 发到 httpbin.org
  • 注意:这不是你电脑的内网 IP,而是你家庭路由器或 ISP 分配的公网出口 IP
4. "url": "http://httpbin.org/get"
  • 服务端最终收到的完整 URL 是什么
  • 包含协议、主机、路径,但没有参数(因为 args 为空)
  • 如果你请求重定向过或 URL 有变化,这里会展示最终实际请求的 URL

# 带参数(注意URL要加引号)
curl "http://httpbin.org/get?name=zhang&age=25"

原理:参数附加在URL后面,?分隔URL和参数,&连接多个参数

2. POST请求

表单提交(application/x-www-form-urlencoded)

curl -X POST -d "username=admin&password=123456" http://httpbin.org/post

JSON提交(REST API常用)

curl -X POST -H "Content-Type: application/json" -d '{"username":"admin"}' http://httpbin.org/post

-X 指定请求方法,-d 发送数据,-H 添加请求头

3.修改User-Agent

# 方法1:-A 参数
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" http://httpbin.org/get

# 方法2:--user-agent
curl --user-agent "MyBot/1.0" http://httpbin.org/user-agent

安全意义:绕过简单的UA检测、模拟不同设备

4.添加Cookie

# 直接添加
curl -b "sessionid=abc123; role=admin" http://httpbin.org/cookies

# 从文件读取(模拟登录状态)
curl -b cookies.txt http://example.com/profile

# 保存响应中的Cookie到文件
curl -c cookies.txt -d "user=admin&pass=123" http://example.com/login

-b 发送Cookie,-c 保存Cookie

5. 常用辅助选项

选项

作用

使用场景

-v

显示完整请求/响应

调试、分析协议细节

-i

显示响应头

查看Set-Cookie、状态码

-L

跟随重定向

测试登录跳转

-k

忽略SSL证书错误

测试自签名证书站点

三、常见错误与解决

错误现象

可能原因

解决方法

curl: (6) Could not resolve host

URL格式错误

检查是否有http://

curl: (7) Failed to connect

目标不可达

检查网络/端口

curl: (52) Empty reply

服务器异常

-v看详情

返回HTML而不是JSON

需要登录

添加Cookie

SSL证书错误

自签名证书

-k参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值