浏览器访问异常,可以用Invoke-WebRequest curl来测试主机间报文和排除浏览器问题。
举例
PowerShell执行
curl http://10.152.64.15:8000
等价
Invoke-WebRequest http://10.152.64.15:8000
如果 curl 直接报错,就能确认不是浏览器问题,是系统层面 HTTP 请求被拦截。
抓包可以看到全过程
screenshot-20260928-095545

翻译成人类语言大白话示例

No.8014:172.30.1.50 对 10.152.64.15 说:我想和你的 8000 端口建立 TCP 连接(SYN 请求)。
No.8016:10.152.64.15 回复 172.30.1.50:收到你的连接请求,我同意建立连接(SYN,ACK)。
No.8017:172.30.1.50 回复 10.152.64.15:收到,我知道你同意建连了,TCP 通道正式打通(ACK)。
No.8018:172.30.1.50 发给 10.152.64.15:HTTP 请求:GET / HTTP/1.1,我要访问网站首页。
No.8019:10.152.64.15 回复 172.30.1.50:我已经收到了你这条 GET 请求报文(仅 ACK 确认,没有返回网页内容)。
No.9375:10.152.64.15 发给 172.30.1.50:我这边没有数据可以发给你了,我准备关闭连接(FIN,ACK)。
No.9376:172.30.1.50 回复 10.152.64.15:收到,我知道你打算关闭连接了(ACK)。
No.9377:172.30.1.50 发给 10.152.64.15:我这边也没有数据要继续发送,我也准备关闭连接(FIN,ACK)。
No.9378:10.152.64.15 回复 172.30.1.50:收到你的关闭请求,整条 TCP 连接正式完成关闭(ACK)。

** curl.exe 命令**
Windows 自带的 curl.exe,和 Linux curl 同源,参数完全一致。
支持全套标准 curl 参数:-v详细输出、-X、-H、-d、-o、-k等,你抓包调试接口就用这个
curl.exe --version #查看版本

curl.exe [可选参数] URL #命令格式

命令参数

参数 全称 作用
-v --verbose 详细模式,打印完整 TCP 握手、请求头、响应头,就是你刚才测试 curl.exe -v http://10.152.64.15:8000 用的,排错首选
-I --head 只发 HEAD 请求,只拿响应头,不获取 body,快速看状态码
-X --request 指定 HTTP 方法:-X POST / -X PUT / -X DELETE
-H --header 添加自定义 HTTP 请求头,可多次写多个 -H
-d --data POST 提交数据(表单 / JSON)
--connect-timeout N 连接超时 N 秒,TCP 握手超时
-m N --max-time 整个请求最大超时 N 秒(总超时)
-L --location 跟随 301/302 重定向
-k --insecure HTTPS 跳过证书校验(内网测试常用)
-o file --output 输出内容保存到指定文件
-O --remote-name 下载文件,使用远端文件名保存(大写 O)
项目 curl(PS 别名 Invoke-WebRequest) curl.exe(原生 curl)
程序类型 PowerShell 内置命令(cmdlet) 独立外部可执行程序
参数 -Uri, -Method, -Headers(PS 风格) -v,-H,-d,-X(标准 curl 参数)
输出 返回 PS 对象,默认解析 HTML 原始 HTTP 响应流,直接输出文本
网络库 .NET WebClient libcurl
适合场景 PowerShell 脚本自动化 接口调试、抓包、HTTP 测试(就是你现在的场景)

常用示例(直接复制就能跑)

  1. 简单 GET(直接输出页面内容)

curl.exe http://10.152.64.15:8000

  1. 调试 GET,打开详细日志(你现在排错用的)

curl.exe -v http://10.152.64.15:8000

  1. 仅查看响应头,不下载正文

curl.exe -I http://10.152.64.15:8000

  1. POST 提交 JSON(API 测试高频)

curl.exe -X POST http://10.152.64.15:8000/api -H "Content-Type: application/json"
-d "{"username":"test","password":"123456"}"

反引号 ``` 是 PowerShell 换行符,一行写不下就用它换行。

  1. POST 表单(application/x-www-form-urlencoded)

curl.exe -X POST http://10.152.64.15:8000/login `
-d "user=test&pwd=123456"

  1. 设置超时,防止卡死

curl.exe -v --connect-timeout 3 -m 10 http://10.152.64.15:8000

3 秒 TCP 连不上直接失败;整个请求最多等待 10 秒。

  1. HTTPS 忽略证书校验

curl.exe -v -k https://xxx

  1. 带自定义请求头(模拟浏览器 UA)

curl.exe -v -H "User-Agent: Mozilla/5.0" http://10.152.64.15:8000

 posted on 2026-09-28 14:32  路边一菜贩  阅读(9)  评论(0)    收藏  举报