HOME / 第 6 部分 · 数据与进阶开发 / 第 70 课
MODULE 6 · 数据与进阶开发
第 70 课 · HTTP 请求与在线数据
🎯 本课学习目标
- 用 HTTPRequest 发起网络请求
- 请求在线数据(JSON)
- 上传与下载文件
在线排行榜、每日签到、下载更新——网络功能本课入门:HTTP 请求。
📖 详细教学步骤
准备 HTTPRequest搭建
- 添加节点
HTTPRequest(无头节点,负责请求) - 请求完成会发
request_completed信号
💡 本地测试可先用公开测试 API(如 httpbin.org)。
GET 请求代码
发起 GET 并处理返回:
GDSCRIPTextends Node
@onready var http: HTTPRequest = $HTTPRequest
func _ready():
http.request_completed.connect(_on_completed)
fetch_weather()
func fetch_weather():
var url = "https://httpbin.org/json"
var error = http.request(url)
if error != OK:
print("请求失败:", error)
func _on_completed(result, response_code, headers, body):
if response_code == 200:
var json = JSON.parse_string(body.get_string_from_utf8())
print("收到数据:", json)
$Label.text = str(json)
else:
print("HTTP 错误:", response_code)
POST 请求(带数据)代码
提交数据(如上传分数):
GDSCRIPTfunc upload_score(score: int, name: String):
var url = "https://example.com/api/score"
var data = JSON.stringify({"score": score, "name": name})
var headers = ["Content-Type: application/json"]
# 发起 POST
http.request(url, headers, HTTPClient.METHOD_POST, data)
下载文件代码
下载图片/资源到本地:
GDSCRIPTfunc download_image(url: String):
http.request(url)
func _on_completed(result, code, headers, body):
if code == 200:
# 保存到 user://
var file = FileAccess.open("user://downloaded.png", FileAccess.WRITE)
file.store_buffer(body)
file.close()
print("下载完成!")
超时与错误处理代码
网络不可靠,必须有兜底:
GDSCRIPTfunc _on_completed(result, code, headers, body):
if result != HTTPRequest.RESULT_SUCCESS:
print("网络错误,请重试")
return
if code != 200:
print("服务器错误:", code)
return
# 成功处理...
HTTPS 与平台注意注意
- Godot 默认支持 HTTPS
- Web 导出跨域需服务器开 CORS
- 请求是异步的,不会卡游戏
- 别在 _ready 里同步阻塞网络
⚠️
request_completed 没触发?
检查 URL 是否可访问、请求是否真的发起了(print 错误码)。网络环境可能屏蔽了外网。
⚠️
解析 JSON 报错?
有些 API 返回不是标准 JSON。先用 print 打印 body 看原始内容。
🧪 动手试一试
🏋️ 课后练习
写一个「在线小游戏公告」:启动时 GET 一个 JSON,解析出公告标题显示在 HUD 上,失败则显示离线提示。
HTTPRequest + request_completed + JSON.parse_string。
💡
用 httpbin.org、jsonplaceholder.typicode.com 等免费 API 练手。
💡
网络请求尽量走单例(如 ApiManager),统一管理。
🎓 本课小结
HTTPRequest 发起网络请求:request 异步执行、request_completed 处理返回;GET 取数据、POST 提交、body 存文件;注意超时与错误兜底。