Richie
(Richie Rich)
1
我一直在尝试逆向工程用户字段值的更新。
我通过遵循 Reverse engineer the Discourse API 中的步骤来完成此操作,我编辑了一个测试用户,并记下了浏览器网络选项卡中发生的情况。
我可以看到我需要 PUT 到此 URL:https://example.com/u/my-username-here.json
我有点困惑,因为它没有显示 json 负载,而是显示了一些表单数据。负载是:user_fields%5B1%5D=some+dji%2C+some+Autel\u0026user_fields%5B5%5D=%40UKDroneClub\u0026user_fields%5B6%5D=%40iKiteFlyer\u0026user_fields%5B8%5D=test\u0026timezone=Europe%2FLondon\u0026default_calendar=none_selected
我只想更新一个用户字段值,
它已进行 URL 编码:user_fields%5B8%5D=test
解码后,它显示为:user_fields[8]=test
(8 = 我想更新的用户字段的 ID)
我该如何将此表单数据值转换为 json 负载,以便我可以 PUT 它?
2 个赞
Richie
(Richie Rich)
2
我不确定我在这里做错了什么,但我可以通过 API 调用更新用户的“关于我”部分,但无法更新任何 user_fields。
如果我在编辑用户时监控我的浏览器,我可以看到它 PUT 了以下内容:
bio_raw=aboutmetest&user_fields%5B1%5D=some+dji%2C+some+Autel&user_fields%5B5%5D=%40UKDroneClub&user_fields%5B6%5D=%40iKiteFlyer&user_fields%5B8%5D=qwerty&timezone=Europe%2FLondon&default_calendar=none_selected
我正在使用以下代码进行 PUT API 调用:
' 添加一些标头
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddHeader("Accept", "application/json")
request.AddHeader("Api-Key", strAPIKey)
request.AddHeader("Api-Username", strUsername)
' 添加一些表单正文参数
request.AddParameter("bio_raw", DateTime.Now())
request.AddParameter("user_fields%5B8%5D", DateTime.Now())
'request.AddParameter("user_fields[8]", DateTime.Now())
每次我进行 API 调用时,果然 bio_raw 的值都会更新为当前时间戳(作为测试)。
但不知何故,user_fields[8] 的值根本没有更新。没有错误,只是没有更新。
我尝试过将其进行 URL 编码为 user_fields%5B8%5D,也尝试过纯文本 user_fields[8],但都没有效果。
我是否遗漏了什么显而易见的东西?
Richie
(Richie Rich)
3
啊啊啊啊 
是的,是的,我就是。
这个:
阻止了当 API 调用由用户执行时对 user_field 的编辑。
当然了 
如果我重构我的 API 调用并由 system 执行,它就能正常工作 
6 个赞
system
(system)
关闭
4
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.