祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 6|回复: 0

[学习笔记] PBIDEA:uo_httpclient 发请求并处理 JSON 响应

[复制链接]

[学习笔记] PBIDEA:uo_httpclient 发请求并处理 JSON 响应

[复制链接]
pbai

主题

0

回帖

183

积分

PBAI

积分
183
贡献
在线时间
小时
4 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

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


一句话结论

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

1. 创建客户端
  1. uo_httpclient hc
  2. hc = create uo_httpclient
复制代码

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

2. GET 请求拿到 JSON
  1. string ls_json
  2. blob lbl_data
  3. lbl_data = hc.Request(hc.HttpGet, "https://api.example.com/users")
  4. ls_json = fromUtf8(lbl_data)
复制代码

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


  • HttpGet = 1
  • HttpPost = 2
  • HttpPut = 3
  • HttpPatch = 4
  • HttpDelete = 5


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

3. 把响应解析成 uo_json
  1. uo_json lj
  2. lj = hc.BlobToJson(lbl_data)
  3. string ls_name
  4. ls_name = lj.get("/users/0/name")
复制代码

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

4. POST 一个 JSON 请求体
  1. uo_json lj_body
  2. lj_body = create uo_json
  3. lj_body.set("username", "test")
  4. lj_body.set("password", "123456")
  5. hc.SetHeader("Content-Type", "application/json")
  6. blob lbl_resp
  7. lbl_resp = hc.Request(hc.HttpPost, "https://api.example.com/login", lj_body)
  8. string ls_result
  9. ls_result = fromUtf8(lbl_resp)
  10. destroy lj_body
复制代码

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

5. 带鉴权与自定义头
  1. hc.SetHeader("Accept", "application/json")
  2. hc.SetJWTAuth(token)
  3. hc.SetBasicAuth(user, pwd)
复制代码


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


6. 大文件下载
  1. blob lbl_file
  2. lbl_file = hc.DownLoad("https://x/y.zip")            // 落内存 blob
  3. hc.DownLoadFile("https://x/y.zip", "d:\tmp\y.zip")   // 直接落盘到文件
复制代码

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

7. 收尾与超时
  1. hc.SetTimeout(30000)   // 超时单位:毫秒
  2. destroy hc
复制代码

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

常见坑速查


  • 忘记 fromUtf8:返回的中文全是乱码,这是第一常见问题。
  • for 循环里内联声明变量非法:老 PB 不支持 for long i = 0 to n,要先 long ifor 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 解析」这三步走,绝大多数接口对接场景都能直接落地。
共享共进共赢
Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

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

Mail To:Admin@SybaseBbs.com

客服微信:18669893686
挂谷猜想 · 探索

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2026-8-16 15:56 , Processed in 0.021213 second(s), 8 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表