可以't使用Prototype.js登录Tiny Tiny RSS API

Can't log into Tiny Tiny RSS API using Prototype.js

本文关键字:Tiny 登录 js RSS API Prototype 使用 可以      更新时间:2023-09-26

我正试图为Tiny Tiny RSS构建一个阅读器,但几乎陷入僵局。我正在通过prototype.js(1.6.1)将该应用程序设置为使用ajax,并尝试简单登录该应用程序以检索密钥。

到目前为止,我拥有的是:

new Ajax.Request(Api.BASE_URL, {
  method: "get",
  parameters: {"op": "login", "user": "user", "password": "password"},
  onSuccess: authSuccess,
  onFailure: failure
})

其中Api.BASE_URL定义为"http://tt-rss.example.com/api/"

当我尝试登录时,我会得到错误响应"NOT_LOGGED_in",这似乎表明api无法识别我正在使用的操作调用,或者参数错误,或者其他什么。

特别奇怪的是,这应该相当于CURL命令:

curl-d'{"op":"login","user":"user","password":"password"}'http://tt-rss.example.com/api/

它工作正常。我觉得我错过了一些非常简单的东西,但不确定是什么。任何帮助都将不胜感激。

除了get-vs-post错误之外,问题还在于我试图使用错误的ajax选项传递一个复杂的json对象。

我用一个更简单的函数调用(isloggdin)进行了测试,所以我的json对象被定义为:

parameters: {"op": "isloggedin"},

当我使用"parameters"ajax选项时,请求以以下形式发送原始数据:

op=isloggedin&_=

它被拒绝了。

另一方面,来自cURL的原始数据看起来像:

{"op":"isloggedin"}

这是有效的。

这篇文章使我步入正轨。我需要使用"postBody"而不是"parameters"来正确发送数据。我的最后命令是这样的:

  postBody: '{"op": "isloggedin"}',

它奏效了。此外,显然在这种情况下,引用的类型确实很重要。如果我在外部使用单引号,它会起作用。如果我在外部使用双引号,如果失败。

curl命令在POST请求中发送数据,而Ajax调用使用GET方法。根据tt-rss API文档,旧版本同时支持GET和POST,但现在必须在HTTPPOST数据中使用JSON对数据进行编码。