curl 是 Linux、macOS 以及 Windows 环境中常用的命令行网络工具,可以直接向指定网址发送 HTTP/HTTPS 请求,并将服务器返回的内容输出到终端。对于百度这类公开网站,使用 curl 可以快速验证网络连通性、查看 HTTP 响应、分析响应头以及提取网页正文。
使用 curl 请求百度网站
最简单的请求方式是直接执行:
Bashcurl https://www.baidu.com
执行后,终端通常会输出百度首页返回的 HTML 内容。例如可以看到类似以下结构:
HTMLcharset="utf-8">百度一下 ...
如果系统提示 curl: command not found,说明当前环境可能没有安装 curl。Linux 可以通过系统软件包管理器安装,Windows 10/11 通常已经自带 curl,可直接在 CMD 或 PowerShell 中运行。
查看百度网站的 HTTP 响应头
如果重点是分析服务器返回的状态码、Content-Type、服务器信息等,可以使用 -I 参数:
Bashcurl -I https://www.baidu.com
该参数执行 HEAD 请求,只获取响应头而不下载完整网页内容。
常见响应头可能类似:
HTTP/1.1 200 OK Content-Type: text/html Content-Length: ... Connection: keep-alive
其中 200 OK 表示请求成功,Content-Type 用于说明响应数据的媒体类型。
需要注意的是,部分网站会针对 HEAD 请求采取与 GET 请求不同的处理策略,因此如果需要验证实际网页内容,仍然应该使用普通的 GET 请求。
显示详细请求和响应过程
排查 curl 请求问题时,-v 参数非常实用:
Bashcurl -v https://www.baidu.com
执行后可以看到 DNS 连接、TCP/TLS 建立过程以及 HTTP 请求和响应头等调试信息。
例如:
* Connected to www.baidu.com > GET / HTTP/1.1 > Host: www.baidu.com > User-Agent: curl/... > < HTTP/1.1 200 OK < Content-Type: text/html
其中:
-
*开头的内容通常属于 curl 的连接和调试信息; -
>表示 curl 发给服务器的 HTTP 请求; -
<表示服务器返回的 HTTP 响应。
如果只是想查看 HTTP 层面的请求过程,而不希望输出 TLS 等更底层的信息,也可以结合其他参数进行控制。
只输出百度网页正文
curl 默认会把服务器返回的数据直接输出到标准输出,因此可以直接将结果保存到文件:
Bashcurl https://www.baidu.com -o baidu.html
执行完成后,当前目录会生成 baidu.html。
也可以使用 Shell 重定向:
Bashcurl https://www.baidu.com > baidu.html
两种方式都可以保存响应正文,但 -o 的语义更加明确,也更适合脚本中的文件下载场景。
保存后,可以使用文本工具查看:
Bashcat baidu.html
或者:
Bashless baidu.html
获取 HTTP 状态码
实际开发中,很多时候并不需要完整 HTML,只想判断百度是否正常响应,可以使用:
Bashcurl -s -o /dev/null -w "%{http_code} " https://www.baidu.com
参数含义如下:
-
-s:关闭进度和错误之外的常规输出; -
-o /dev/null:丢弃网页正文; -
-w "%{http_code} ":按照指定格式输出 HTTP 状态码。
如果服务器正常返回,可能得到:
200
这种写法非常适合 Shell 脚本中的健康检查。
例如:
Bashstatus=$(curl -s -o /dev/null -w "%{http_code}" https://www.baidu.com) if [ "$status" = "200" ]; then echo "百度访问正常" else echo "请求异常,HTTP状态码:$status" fi
查看响应时间
curl 的 -w 参数不仅可以获取状态码,还能输出请求耗时:
Bashcurl -s -o /dev/null -w "HTTP: %{http_code} Time: %{time_total}s " https://www.baidu.com
可能得到:
HTTP: 200 Time: 0.245123s
time_total 表示从请求开始到传输完成的大致总耗时。
如果需要进行网络性能分析,还可以查看 DNS、TCP、TLS 等阶段的耗时:
Bashcurl -s -o /dev/null -w "DNS: %{time_namelookup}s Connect: %{time_connect}s TLS: %{time_appconnect}s Start: %{time_starttransfer}s Total: %{time_total}s " https://www.baidu.com
这种方式对于定位“DNS 慢”“建立连接慢”或“服务器响应慢”等问题很有帮助。
查看百度返回的页面内容并解析 HTML
curl 本身主要负责发送网络请求和获取响应,并不是专门的 HTML 解析器。
例如:
Bashcurl -s https://www.baidu.com
得到的是 HTML 文本。如果需要进一步提取标题、链接或其他元素,可以把 curl 的输出交给其他命令行工具处理。
例如简单搜索 HTML 中的 :
Bashcurl -s https://www.baidu.com | grep -i ""
如果只需要查看包含关键词的内容,也可以:
Bashcurl -s https://www.baidu.com | grep -i "百度"
不过,grep 只是文本匹配工具,并不理解 HTML 的 DOM 结构,因此不适合处理复杂网页。
对于结构化 HTML 解析,可以使用 xmllint、Python、BeautifulSoup 等工具。例如使用 Python 处理 curl 保存下来的页面:
Bashcurl -s https://www.baidu.com -o baidu.html
然后:
Python运行from bs4 import BeautifulSoup with open("baidu.html", "r", encoding="utf-8") as f: html = f.read() soup = BeautifulSoup(html, "html.parser") print(soup.title.get_text(strip=True) if soup.title else "没有找到标题")
这样就能将“请求网页”和“解析 HTML”两个环节分开处理。
使用 User-Agent 模拟浏览器请求
服务器有时会根据 User-Agent 判断客户端类型。curl 默认使用类似 curl/版本号 的 User-Agent。
可以通过 -A 自定义:
Bashcurl -A "Mozilla/5.0" https://www.baidu.com
也可以指定更完整的浏览器 User-Agent:
Bashcurl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/128.0.0.0 Safari/537.36" https://www.baidu.com
需要注意,修改 User-Agent 只是改变请求头中的客户端标识,并不能保证网站一定按照浏览器方式返回内容。
自动处理 HTTP 重定向
网站可能通过 301 或 302 将请求跳转到其他地址。curl 默认不会自动跟随重定向。
可以添加 -L:
Bashcurl -L https://www.baidu.com
如果希望同时查看最终响应状态,可以:
Bashcurl -s -L -o /dev/null -w "%{http_code} " https://www.baidu.com
对于需要跟踪跳转链的场景,可以结合 -v 观察每一次 HTTP 响应。
将响应头和响应正文一起查看
如果希望完整观察服务器返回的数据,可以使用:
Bashcurl -i https://www.baidu.com
-i 会将 HTTP 响应头和响应正文同时输出。
例如:
HTTP/1.1 200 OK Content-Type: text/html ... ...
与 -I 不同,-I 主要获取响应头,而 -i 则是在正常 GET 请求的基础上把响应头也显示出来。
查看百度请求过程中是否发生重定向
可以执行:
Bashcurl -I https://www.baidu.com
如果需要跟随重定向:
Bashcurl -I -L https://www.baidu.com
对于部分服务器来说,HEAD 请求与 GET 请求的响应并不完全一致。如果需要准确模拟实际页面访问过程,可以使用:
Bashcurl -s -D - -o /dev/null -L https://www.baidu.com
其中 -D - 表示把响应头输出到标准输出,-o /dev/null 则丢弃正文。
处理 HTTPS 证书问题
访问百度使用的是 HTTPS,因此 curl 会进行 TLS 证书校验。
正常情况下直接执行:
Bashcurl https://www.baidu.com
即可。
如果测试环境出现类似证书验证失败的问题,可以先检查系统时间、CA 证书以及网络环境,而不是直接关闭安全校验。
curl 提供了:
Bashcurl -k https://www.baidu.com
用于跳过证书验证,但这会降低 HTTPS 连接的安全性。生产环境不建议使用 -k,尤其不要把它作为解决证书配置问题的长期方案。
设置连接超时时间
脚本访问外部网站时,如果服务器长时间没有响应,程序可能一直等待。因此可以设置超时时间:
Bashcurl --connect-timeout 5 --max-time 10 https://www.baidu.com
这里:
-
--connect-timeout 5:建立连接最多等待 5 秒; -
--max-time 10:整个请求最多运行 10 秒。
这样可以避免网络异常导致脚本长时间阻塞。
使用 curl 判断百度是否可以访问
如果目的是简单检测网络,可以采用:
Bashcurl -sS -o /dev/null -w "%{http_code} " --connect-timeout 5 https://www.baidu.com
其中 -sS 在保持安静输出的同时,遇到错误仍然显示错误信息。
进一步结合 Shell 可以写成:
Bashif curl -sS --connect-timeout 5 -o /dev/null https://www.baidu.com; then echo "请求成功" else echo "请求失败" fi
这种检测方式比单纯判断是否输出 HTML 更适合自动化脚本。
常见问题及解决方法
1. 执行 curl 没有任何网页内容
首先使用:
Bashcurl -v https://www.baidu.com
检查 DNS、TCP、TLS 和 HTTP 请求过程。
2. 返回 301 或 302
可以添加:
Bashcurl -L https://www.baidu.com
让 curl 自动跟随重定向。
3. 页面显示乱码
先检查响应头中的字符集信息:
Bashcurl -I https://www.baidu.com
如果服务器返回的内容使用特定编码,而终端编码不匹配,就可能出现乱码。保存 HTML 后,可以再根据实际字符集进行转换或使用支持该编码的解析工具。
4. 请求超时
可以设置:
Bashcurl --connect-timeout 5 --max-time 15 https://www.baidu.com
同时通过 -v 判断问题发生在 DNS、连接建立还是服务器响应阶段。
5. HTTPS 证书报错
优先检查系统 CA 证书、系统时间和网络代理配置。测试时可以临时使用 -k 定位问题,但不应依赖关闭证书验证来解决生产环境的 HTTPS 安全问题。
curl 请求百度的常用命令汇总
| 需求 | 命令 |
|---|---|
| 获取网页 | curl https://www.baidu.com |
| 查看响应头 | curl -I https://www.baidu.com |
| 查看详细请求过程 | curl -v https://www.baidu.com |
| 响应头+正文 | curl -i https://www.baidu.com |
| 自动跟随跳转 | curl -L https://www.baidu.com |
| 保存网页 | curl -o baidu.html https://www.baidu.com |
| 获取状态码 | curl -s -o /dev/null -w "%{http_code}
" https://www.baidu.com |
| 查看请求耗时 | curl -s -o /dev/null -w "%{time_total}
" https://www.baidu.com |
| 设置 User-Agent | curl -A "Mozilla/5.0" https://www.baidu.com |
| 设置连接超时 | curl --connect-timeout 5 https://www.baidu.com |
通过这些参数,可以将 curl 从简单的“网页下载命令”扩展为一个实用的 HTTP 调试工具。请求百度时,通常可以按照“先确认连通性,再查看响应头,最后分析正文”的思路排查问题。若需要对 HTML 中的标题、链接或特定节点进行准确提取,则应将 curl 与专业的 HTML 解析工具结合,而不是单独依赖文本匹配命令。