Как исправить код ошибки JSON-RPC 591 с помощью swift

Я делаю приложение для 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 05.04.2019 17:05

@Larme да, с параметрами все в порядке, если я войду на веб-сайт, увидев, что такое идентификатор сеанса, я смогу получить быстрый ответ, что снова заставляет меня поверить, что сеанс не находится в «JSON-RPC». "государство или что-то

ezb2661 05.04.2019 17:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
423
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме