需要通过API更新个人资料信息的帮助

我在论坛上找到了一些通过 API 更新用户信息的方法,但无法使其正常工作。我是一名初级开发人员,所以也许我遗漏了显而易见的东西。

首先,我尝试让这个示例工作:
curl -X PUT -d 'name=new name’ -L 'https://mysite.com/users/user12345.json?api_key=mykey\u0026api_username=username'

但我收到“BAD CSRF”,所以我尝试了这个:

curl -X PUT \
  -H "Content-Type: multipart/form-data" \
  -H "Api-Key: mykey" \
  -H "Api-Username: username" \
  -d '{"name”: “new name"}' \
  -L 'https://mysite.com/users/user12345.json'

这返回“success”:“OK”,然后是该用户的全部 json,但实际上并未进行任何更新。

我遗漏了什么吗?

另外一个相关的问题是:您是否能够使用相同的方法更新用户名?

感谢您的帮助。

是的,这种方式已被弃用,取而代之的是在标头中传递凭据(如下所示)。

您混合使用了引号字符:\"。这可能是原因所在。:thinking:

4 个赞

感谢 @Arkshine。我已经确保所有的引号字符都相同 \",但它仍然不起作用。

搞不清楚问题出在哪里。

您是否尝试过 Reverse engineer the Discourse API 来检查使用 UI 进行更改时会发生什么?

当我向 /u/test_one.json 发送 PUT 请求时,它对我来说是有效的。

1 个赞

感谢 @JammyDodger。我按照您的建议在管理界面中更新了名称,然后在网络选项卡中查看。正如您所提到的,它在不同的 URL(/u 而不是 /users)下执行更新,但当我更改 URL 时,它仍然不起作用。

在“表单数据”下,我正在查看请求,它是:name: "newname",就像我发送的一样。

据我所知,一切看起来都对,但它仍然没有更新。我很困惑。

好的……我花了更多时间浏览论坛,发现了一个 7 年前的类似问题。结果发现,如果将 Content-Type 更新为“application/json; charset=utf-8”,它就可以工作了!

我还有一个最后的问题:如何通过 API 更新用户名?

我尝试过这样做,但它不起作用:

-d '{\"name”: “new name\", \"username\": \"new username\"}' \\

1 个赞

好的……我终于弄明白了。我在这里留下一个简短的摘要,以防将来有人想知道如何做到这一点。我在论坛上找到的其他答案已经过时了。

通过 API 更新名称:
curl -X PUT -H "Content-Type: application/json; charset=utf-8" -H "Api-Key: mykey" -H "Api-Username: username" -d '{"name": “mynewname"}' -L 'https://mysite.com/u/user12345.json'

通过 API 更新用户名:
curl -X PUT -H "Content-Type: application/json; charset=utf-8" -H "Api-Key: myapikey" -H "Api-Username: username" -d '{"new_username": "mynewusername"}' -L 'https://mysite.com/u/user12345/preferences/username.json'

4 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.