Получение ошибки «Вход не проверен» в Play Framework - PullRequest
0 голосов
/ 03 марта 2020

При попытке получить доступ к API отдыха с аутентификацией я получаю имя, не проверенное. Я использую WS Play в Лагоме. Запрос на вход в систему выглядит примерно так:

val reqLogin = ws.url(loginURL)
  .withAuth(userName, password, WSAuthScheme.BASIC)
  .execute()

Сообщение от последующего запроса является 401 несанкционированной ошибкой. Вот как я пытаюсь выполнить запрос после вышеуказанной попытки входа в систему:

val loginResponse = Await.result(reqLogin, Duration(60, "seconds"))
val cookies = loginResponse.cookies
val queryResponse = ws.url(queryURL)
    .withCookies(cookies.toSeq :_*)
    .execute()
val queryResponseOutput = Await.result(queryResponse, Duration(60, "seconds"))

1 Ответ

0 голосов
/ 03 марта 2020

В первом запросе вы входите, используя HTTP Basi c аутентификация . Поддерживает ли используемый вами сайт аутентификацию HTTP basi c? Обычно, когда сайт поддерживает его, он не отправит вам сообщения ie, скорее он будет ожидать, что учетные данные будут отправляться при каждом запросе. Таким образом, при использовании аутентификации HTTP basi c не требуется входить по URL-адресу входа, вместо этого добавьте имя пользователя и пароль в запрос к queryUrl. Если это не сработает, то это может означать, что сайт, на который вы делаете запросы, не поддерживает HTTP Basi c аутентификацию.

Другой тип входа в систему - ввод имени пользователя и пароля при входе в систему. форма, а затем сайт, на который вы входите, отправит вам обратно повара ie, который вы можете использовать для последующих запросов. Похоже, это то, что вы пытаетесь сделать, но чтобы сделать это, вы не можете использовать метод withAuth, скорее, вы должны выяснить, какие параметры имени пользователя / пароля находятся в форме входа на сайт, и отправить форма с этими параметрами. Я не могу сказать вам, что это за параметры, которые полностью зависят от сайта, на который вы входите, вам придется посмотреть документацию для этого сайта или HTML, которые он выводит на странице входа в систему. Когда вы получите ответ на запрос входа в систему, вы должны проверить код ответа, чтобы увидеть, был ли он успешным. Документацию о том, как отправить параметры формы с помощью Play WS, можно найти здесь , вот пример того, как это может выглядеть:

val reqLogin = ws.url(loginURL)
  .post(Map(
    "yourusernameparameter" -> Seq(userName),
    "yourpasswordparameter" -> Seq(password)
  ))

Чтобы прояснить, yourusernameparameter и yourpasswordparameter поля выше должны быть заменены тем, что требуется для сайта, на который вы входите. Вам также может понадобиться ввести токены CSRF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...