在CentOS系统中,发送HTTP请求是一项基础且核心的操作,无论是用于自动化脚本、API接口调试、服务状态监控,还是简单的数据获取,都离不开它,作为一款广泛应用的Linux发行版,CentOS提供了多种强大而灵活的工具来完成这项任务,本文将深入探讨在CentOS环境下发送HTTP请求的几种主流方法,从经典的命令行工具到功能丰富的脚本语言,旨在为不同需求的用户提供一份详尽的实践指南。

使用 curl:多功能命令行工具
curl(Client URL)无疑是Linux世界中最著名、功能最强大的HTTP客户端工具,它支持多种协议,包括HTTP、HTTPS、FTP等,并能处理复杂的请求场景,如自定义头部、POST数据、文件上传、HTTPS证书验证等。
基本GET请求
最简单的用法就是直接获取一个网页的内容。
curl https://www.example.com
这条命令会向 https://www.example.com 发送一个GET请求,并将返回的HTML内容直接打印在终端上。
查看详细信息
在进行调试时,我们通常需要查看请求的完整过程,包括请求头、响应头等,这时可以使用 -v(verbose)或 -I(head)选项。
-v:显示详细的通信过程,包括请求和响应的头部信息。-I:仅发送HEAD请求,只获取响应头,不下载响应体。
# 显示详细的通信过程 curl -v https://api.github.com/users/octocat # 仅获取响应头 curl -I https://www.example.com
发送POST请求
curl 发送POST请求同样非常便捷,通常用于向服务器提交数据,使用 -X POST 指定请求方法,并用 -d 或 --data 来附加数据。
curl -X POST -d "username=testuser&password=123456" https://httpbin.org/post
上述命令模拟了一个表单提交,Content-Type 会被自动设置为 application/x-www-form-urlencoded。
处理JSON数据
在现代Web API中,JSON是最常见的数据交换格式,要发送JSON数据,我们需要手动设置 Content-Type 请求头。
curl -X POST -H "Content-Type: application/json" -d '{"name": "centos", "version": "7"}' https://httpbin.org/post
-H "Content-Type: application/json":明确告诉服务器我们发送的是JSON格式数据。-d '{"name": "centos", "version": "7"}':将JSON字符串作为请求体。
保存响应到文件
如果需要将服务器的响应保存到文件,而不是显示在终端,可以使用 -o 或 -O 选项。
-o <filename>:指定文件名保存。-O:使用URL中的文件名保存。
# 保存为 index.html curl -o index.html https://www.example.com # 如果URL是 https://example.com/file.zip,则会保存为 file.zip curl -O https://example.com/file.zip
使用 wget:强大的下载工具
wget 是另一个经典的命令行工具,它的主要设计目标是文件下载,但同样可以用来发送HTTP请求,与curl相比,wget更擅长递归下载和后台运行。

基本用法
wget https://www.example.com
这会下载 index.html 文件到当前目录。
发送POST请求
wget 也可以发送POST请求,使用 --post-data 参数。
wget --post-data="param1=value1¶m2=value2" https://httpbin.org/post -O post_result.html
这里我们使用 -O post_result.html 将POST请求的响应保存到文件中,因为wget默认会下载文件。
curl 与 wget 的简单对比
两者功能有重叠,但侧重点不同,下表可以帮助你快速选择:
| 特性 | curl |
wget |
|---|---|---|
| 主要用途 | 数据传输、API调试、单次请求 | 文件下载、镜像站点 |
| 默认输出 | 输出到标准输出(终端) | 保存到文件 |
| 协议支持 | 更广泛(支持SCP, SFTP等) | 相对较少 |
| 递归下载 | 不支持 | 强大的递归下载支持 |
| 交互性 | 更适合在脚本和管道中使用 | 更适合独立的下载任务 |
使用脚本语言:Python示例
当需要处理更复杂的逻辑,如解析响应、条件判断、错误重试或与其它系统集成时,使用脚本语言是更优的选择,Python凭借其简洁的语法和强大的库(如 requests)成为首选。
确保安装了 requests 库:
sudo yum install python3-pip pip3 install requests
可以编写一个简单的Python脚本来发送请求。
import requests
import json
# 目标API URL
url = "https://httpbin.org/get"
try:
# 发送GET请求
response = requests.get(url)
# 检查HTTP状态码,判断请求是否成功
if response.status_code == 200:
# 解析JSON响应
data = response.json()
print("GET请求成功,响应数据:")
print(json.dumps(data, indent=4))
else:
print(f"请求失败,状态码: {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"发生错误: {e}")
# --- 发送POST请求示例 ---
post_url = "https://httpbin.org/post"
post_data = {'key': 'value', 'source': 'python_script'}
headers = {'Content-Type': 'application/json'}
try:
post_response = requests.post(post_url, data=json.dumps(post_data), headers=headers)
if post_response.status_code == 200:
print("\nPOST请求成功,响应数据:")
print(json.dumps(post_response.json(), indent=4))
else:
print(f"POST请求失败,状态码: {post_response.status_code}")
except requests.exceptions.RequestException as e:
print(f"发生错误: {e}")
这个脚本展示了如何发送GET和POST请求,处理JSON数据,并进行基本的错误处理,这种方式提供了无与伦比的灵活性和控制力。
使用现代工具 httpie
httpie 是一个用户友好的命令行HTTP客户端,它的目标是让CLI与Web服务的交互尽可能简单和直观,它的语法更接近自然语言,并且默认对JSON提供支持,输出也经过美化(彩色高亮)。

安装 httpie:
pip3 install httpie
使用示例:
# GET请求 http https://api.github.com/users/octocat # POST请求(默认使用JSON) http POST https://httpbin.org/post name=centos version=7
可以看到,httpie 的语法非常简洁,无需手动设置 Content-Type,它会自动将 name=centos version=7 转换为JSON,对于日常的API测试和调试,httpie 是一个非常高效的工具。
相关问答FAQs
在使用 curl 发送POST请求时,服务器返回 415 Unsupported Media Type 错误,这是什么原因?
解答: 这个错误表示服务器无法处理请求体中的媒体格式,最常见的情况是,你试图向一个期望接收JSON格式数据的API端点发送了未经格式化的字符串或表单数据,错误地使用了 curl -d "name=value" 而没有设置正确的 Content-Type 头部,解决方法是明确告诉服务器你发送的是JSON数据,通过添加 -H "Content-Type: application/json" 请求头,并确保 -d 参数后面的数据是合法的JSON字符串,如 {"key": "value"}。
如何通过 curl 访问一个需要Bearer Token认证的API?
解答: 现代API普遍使用Bearer Token(通常称为JWT)进行身份验证,要在 curl 请求中携带这个令牌,你需要使用 -H 或 --header 选项来设置 Authorization 请求头,格式为 Authorization: Bearer <你的令牌>,如果你的令牌是 my_secret_token_123,完整的命令如下:
curl -H "Authorization: Bearer my_secret_token_123" https://api.example.com/protected-resource
这样,服务器在收到请求时会从 Authorization 头中解析出你的令牌,并据此进行身份验证,请务必将 my_secret_token_123 替换为你实际获取到的有效令牌。