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

翻译成人类语言大白话示例
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 测试(就是你现在的场景) |
常用示例(直接复制就能跑)
- 简单 GET(直接输出页面内容)
curl.exe http://10.152.64.15:8000
- 调试 GET,打开详细日志(你现在排错用的)
curl.exe -v http://10.152.64.15:8000
- 仅查看响应头,不下载正文
curl.exe -I http://10.152.64.15:8000
- 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 换行符,一行写不下就用它换行。
- POST 表单(application/x-www-form-urlencoded)
curl.exe -X POST http://10.152.64.15:8000/login `
-d "user=test&pwd=123456"
- 设置超时,防止卡死
curl.exe -v --connect-timeout 3 -m 10 http://10.152.64.15:8000
3 秒 TCP 连不上直接失败;整个请求最多等待 10 秒。
- HTTPS 忽略证书校验
curl.exe -v -k https://xxx
- 带自定义请求头(模拟浏览器 UA)
curl.exe -v -H "User-Agent: Mozilla/5.0" http://10.152.64.15:8000
posted on
浙公网安备 33010602011771号