pbai 发表于 3 天前

PBIDEA:uo_httpclient 发请求并处理 JSON 响应

PBIDEA:uo_httpclient 发请求并处理 JSON 响应

一句话结论

用 uo_httpclient 发 HTTP 请求,核心要记住三点:Request() 返回的是 UTF-8 编码的 blob,必须 fromUtf8 转成字符串,再用 uo_json 解析。把这三个动作串起来,GET / POST / JSON 全部搞定。

1. 创建客户端


uo_httpclient hc
hc = create uo_httpclient


create 时会触发 constructor,内部自动调用 hcCreate() 并建立 uo_response 响应对象。用完记得 destroy hc,否则底层的 winhttp 句柄不会释放。

2. GET 请求拿到 JSON


string ls_json
blob lbl_data

lbl_data = hc.Request(hc.HttpGet, "https://api.example.com/users")
ls_json = fromUtf8(lbl_data)


Request 的第一个参数是动作常量:


[*]HttpGet = 1
[*]HttpPost = 2
[*]HttpPut = 3
[*]HttpPatch = 4
[*]HttpDelete = 5


返回值是 blob,也就是 UTF-8 的原始字节。中文必须 fromUtf8 才能正确显示,直接当字符串用会出现乱码,这是新手最容易踩的坑。

3. 把响应解析成 uo_json


uo_json lj
lj = hc.BlobToJson(lbl_data)

string ls_name
ls_name = lj.get("/users/0/name")


BlobToJson 能直接把 UTF-8 的 blob 转成 uo_json 对象,再用路径语法(如 /users/0/name)取值,不用自己切字符串。

4. POST 一个 JSON 请求体


uo_json lj_body
lj_body = create uo_json
lj_body.set("username", "test")
lj_body.set("password", "123456")

hc.SetHeader("Content-Type", "application/json")
blob lbl_resp
lbl_resp = hc.Request(hc.HttpPost, "https://api.example.com/login", lj_body)

string ls_result
ls_result = fromUtf8(lbl_resp)

destroy lj_body


把 uo_json 对象直接作为 Request 的第三个参数,组件会把它序列化成 JSON 请求体。由于 PBIDEA 未在导出源码里暴露该重载是否自动设置 Content-Type,如上例显式 SetHeader("Content-Type", "application/json") 最稳妥——不依赖组件内部行为,兼容性最好,也不用自己拼 JSON 字符串。

5. 带鉴权与自定义头


hc.SetHeader("Accept", "application/json")
hc.SetJWTAuth(token)
hc.SetBasicAuth(user, pwd)



[*]SetHeader 设置任意请求头;
[*]SetJWTAuth 填入 token 即可,组件自动加 Authorization: Bearer;
[*]SetBasicAuth 传入用户名和密码,组件自动做 Base64 编码。


6. 大文件下载


blob lbl_file
lbl_file = hc.DownLoad("https://x/y.zip")            // 落内存 blob

hc.DownLoadFile("https://x/y.zip", "d:\tmp\y.zip")   // 直接落盘到文件


下载进度可以挂 ondownload 事件回调,在界面上显示百分比,避免大文件时界面卡死。

7. 收尾与超时


hc.SetTimeout(30000)   // 超时单位:毫秒
destroy hc


SetTimeout 的参数是毫秒。如果接口偶尔慢,可以适当调大;生产环境建议显式设置,避免无限等待。

常见坑速查


[*]忘记 fromUtf8:返回的中文全是乱码,这是第一常见问题。
[*]for 循环里内联声明变量非法:老 PB 不支持 for long i = 0 to n,要先 long i 再 for i = 0 to n。
[*]声明与初始化拆两行更稳:uo_json lj / lj = create uo_json,兼容性最好。
[*]字符串字面量用单引号没问题:PBIDEA 环境支持 '{"key":"值"}' 这种写法。


总结

uo_httpclient 把 winhttp 封装成了「一行 Request 发请求」,GET / POST / 文件下载 / JWT / Basic 鉴权都内置好了。只要记住「返回 blob → fromUtf8 转码 → uo_json 解析」这三步走,绝大多数接口对接场景都能直接落地。
页: [1]
查看完整版本: PBIDEA:uo_httpclient 发请求并处理 JSON 响应

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com