Я делаю приложение для iOS с Swift, которое я хочу использовать на сервере с 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, который собирает мое приложение, не является, так сказать, «аутентифицированным». Я скопировал исходный запрос скручивания из моего браузера, и он отлично работает, затем я заменил JSESSIONID на один из моего приложения, и он перестает работать, так это проблема с использованием JSON-RPC? Есть ли какая-либо форма «аутентификации» / проверки, которую мне нужно сделать перед ее использованием?
РЕДАКТИРОВАТЬ 2: я обнаружил, что, когда я открываю веб-сайт в Chrome и заменяю JSESSIONID на мои приложения sessionid, а затем нажимаю на страницу почты, запрос в моем приложении работает, что снова заставляет меня поверить, что есть какая-то аутентификации, которая происходит при загрузке страницы.