如何快速修复JSON-RPC错误代码591

时间:2019-04-05 13:46:46

标签: swift json-rpc

我正在用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,然后单击邮件页面时,我的应用程序中的请求有效,这再次使我认为存在某种形式加载页面时发生的身份验证。

1 个答案:

答案 0 :(得分:1)

好,所以我知道这很晚了,但是对于任何想知道我如何解决它或者如果您有任何错误的人,我能够通过将GET请求发送到网站的邮件页面来解决此问题,尝试使用mailDelegate,因为我猜网站要在该会话下加载页面后才初始化委托。