Я делаю приложение для 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, который собирает мое приложение, так сказать, не "аутентифицирован". Я скопировал исходный запрос curl из своего браузера, и он отлично работает, затем я заменил JSESSIONID на один из своего приложения, и он перестал работать, так что это проблема с тем, как я использую JSON-RPC? Есть ли какая-либо форма «аутентификации»/проверки, которую мне нужно выполнить перед ее использованием?
Обновлено еще раз: я обнаружил, что когда я открываю веб-сайт в Chrome и заменяю JSESSIONID своим идентификатором сеанса приложений, затем нажимаю на страницу почты, запрос в моем приложении работает, что снова заставляет меня поверить, что существует какая-то аутентификация, которая происходит, когда я загружаю страницу.
@Larme да, с параметрами все в порядке, если я войду на веб-сайт, увидев, что такое идентификатор сеанса, я смогу получить быстрый ответ, что снова заставляет меня поверить, что сеанс не находится в «JSON-RPC». "государство или что-то





Итак, я знаю, что это поздно, но для всех, кто хочет знать, как я это исправил или у кого-то из вас есть такая же ошибка, я смог исправить это, отправив запрос GET на Почтовую страницу веб-сайта, прежде чем пытаться использовать mailDelegate, потому что я предполагаю, что веб-сайт не инициализирует делегата, пока страница не будет загружена в рамках этого сеанса.
Параметры в порядке? Разве не пропущено
\"вокруг идентификатора, метода и параметров?