Sunshine项目PIN校验流程请求响应机制及直接传参方法问询
问题解答
1. request与response的具体指代
二者是Sunshine服务处理HTTP请求时的自定义上下文对象,对应HTTP协议的核心组成部分:
request类型为req_https_t,指代客户端发给服务端的完整HTTP请求,当前场景下包含的核心内容有:- 请求方法:
POST - 请求路径:
/api/pin - 请求头:包含Content-Type、鉴权Cookie等元数据
- 请求体:前端提交的JSON格式字符串
{"pin":"用户输入的PIN"},也就是代码中request->content读取的内容
- 请求方法:
response类型为resp_https_t,指代服务端要返回给客户端的完整HTTP响应,代码中把PIN校验结果封装为JSON后,通过response->write()写回给前端,前端fetch接口拿到的返回值就是这个对象的解析结果。
2. 传入指定PIN的实现方法
分两种常见场景实现:
场景1:不修改代码,直接调用现有接口
你可以用任意HTTP客户端向Sunshine服务的/api/pin接口发POST请求即可,注意调用前需要先登录Sunshine的Web管理端,保证请求携带有效鉴权Cookie,否则会被函数开头的鉴权逻辑拦截,举两个常用实现示例:
- 使用curl命令行工具:
curl -X POST -H "Content-Type: application/json" -d '{"pin":"1234"}' http://<你的Sunshine服务IP:端口>/api/pin
- 在pin.html页面的浏览器控制台直接执行:
fetch("/api/pin", { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({pin: "1234"}) }).then(res => res.json()).then(res => console.log("校验结果:", res.status))
场景2:在C++代码内部直接调用savePin函数
你需要按以下步骤构造参数调用:
- 构造符合要求的
request对象,向request->content流写入JSON字符串{"pin":"1234"} - 构造空的
response对象,用于接收返回的校验结果 - 确保构造的
request和response能通过authenticate()鉴权校验,否则函数会直接返回不执行PIN校验逻辑 - 直接调用
savePin(response, request)即可完成指定PIN的传入,后续可以从response中读取JSON格式的校验结果。
内容的提问来源于stack exchange,提问作者Parisa.H.R
相关产品推荐
相关产品推荐

