【问题标题】:How to fix JSON-RPC error code 591 with swift如何使用 swift 修复 JSON-RPC 错误代码 591
【发布时间】:2019-08-24 19:29:32
【问题描述】:

我正在使用 Swift 制作一个 iOS 应用程序,我想将它与具有 JSON-RPC 的服务器一起使用(服务器不归我所有)。我已经能够登录到服务器并保存我知道正在工作的 cookie,因为能够查看服务器其他部分上的内容,这些内容只有在经过身份验证时才能查看,但是当我尝试使用 JSON-RPC 时它会抛出我的错误提示

{\"id\":3,\"error\":{\"code\":591,\"msg\":\"method with the requested number of arguments not found (session may have timed out)\"}}

JSON-RPC 用于登录并列出所有方法,所以我认为需要您登录的方法肯定有问题

我尝试通过在 params 字段中添加引号来解决此问题,但这也不起作用。当我登录时,我必须提交请求正文,我必须使用字符串而不是字典。

我用来发送请求的代码是这样的:

    guard let url = URL(string: "JSON-RPC URL") else { return; };
    let params: Data? = "{id:3,method:\"mailDelegate.getMailData\",params:[]}".data(using: .utf8);
    var request = URLRequest(url: url);
    request.httpMethod = "POST";
    request.httpBody = params;
    request.addValue(cookies, forHTTPHeaderField: "Cookie");
    let session = URLSession.shared;
    print("Sending request with cookies of " + cookies);
    session.dataTask(with: request) { (data, response, err) in
        print(String(data: data, encoding: .utf8));
    }.resume();

当我这样做时,我希望它显示电子邮件数据(如果我使用 chrome 开发人员工具并将请求复制为 curl 并将其粘贴到终端中,则可以看到),但它却得到了我在问题的第一部分。

编辑 1:我发现我的应用程序收集的 JSESSIONID 没有“经过身份验证”,可以这么说。我使用浏览器复制了原始 curl 请求,它工作得很好,然后我用我的应用程序中的一个替换了 JSESSIONID,它停止工作,所以这是我使用 JSON-RPC 的问题吗?在使用之前我需要做任何形式的“身份验证”/验证吗?

编辑 2:我发现当我在 Chrome 中打开网站并将 JSESSIONID 替换为我的应用程序 sessionid 然后单击邮件页面时,我的应用程序中的请求有效,这再次使我相信存在某种加载页面时发生的身份验证。

【问题讨论】:

  • 参数好吗? id、方法和参数周围是不是缺少\"
  • @Larme 是的,参数很好,如果我在看到 sessionID 是什么后登录网站,我就能很快得到响应,这再次让我相信会话是'不处于“JSON-RPC”状态或其他状态

标签: swift json-rpc


【解决方案1】:

好的,所以我知道这已经晚了,但是对于任何想知道我如何修复它的人,或者如果你们中的任何人有同样的错误,我之前可以通过向网站的邮件页面发送 GET 请求来解决这个问题尝试使用 mailDelegate,因为我猜网站在该会话下加载页面之前不会初始化委托。

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 2021-12-06
    • 2018-05-05
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多