2016-05-16 2 views
1

Я новичок в использовании Play Framework и WSClient внутри него. Я столкнулся с проблемой при попытке.Play WSResponse не содержит куки или заголовки от WSRequest

Я создал запрос с WS.url ("urlhere") withHeaders ("Cookie -> cookieIuse").. Получить()

с ответом от этого вызова я использую печенье вызов и проверил размер из массива печенья, но он оказался 0!

Я убедился, что запрос проходил правильно, и это было! Мой код должен был откликнуться на файлы cookie, так как я использовал theCookies для возврата файлов cookie. Есть идеи? Я проверил свой код и последовал за ним, и все правильно, за исключением того, что ни один из файлов cookie или заголовков fromCookies не возвращается в WSResponse.

Благодаря

ответ

1
WS.url("urlhere").withHeaders("Cookie -> cookieIuse") 

, который устанавливает куки в запрос, а не в ответ. Если вы хотите получить cookie от ответа, вы должны установить cookie в ответ в своем контроллере, а не запрос, используя следующий код.

response().setCookie("Cookie", "cookieIuse"); 

ссылка здесь https://www.playframework.com/documentation/2.5.x/JavaResponse

Другое дело, что, если «urlhere» не ваш собственный веб-сайт URL, у вас нет прав для управления ответ, который возвращается на стороне сервера и также может быть изменен только на сервере. Индекс

дают некоторый пример для вас, код Scala будет ниже, и Java выглядит как это

class Application @Inject() (ws: WSClient) extends Controller { 

implicit val context = play.api.libs.concurrent.Execution.Implicits.defaultContext 

def index = Action { implicit request => 
    //get all contents from request header including cookies set in 'test' controller 
    //and turn it to map 
    val requestCookies = request.headers.toSimpleMap 

    //print the cookies in the request send from 'test' controller 
    println(requestCookies) 

    Ok(views.html.index("Your new application is ready.")).withCookies(Cookie("theme", "blue")) 
} 

def test = Action { implicit request => 
    //method 'withHeaders' sets the cookies into request 
    //and send it to 'index' controller 
    val futureResponse: Future[WSResponse] = ws.url("http://localhost:9000/").withHeaders("cookie" -> "test").get() 

    futureResponse.map { 
    //get cookie from WSResponse, the response is the type of WSResponse after mapped 
    response => response.cookies.foreach(println(_)) 

    } 
    Ok("test") 
} 
} 

в приведенном выше примере, «тест» Действие будет вызывать»:

обновление 'с WS. «Индекс» возвращает ответ с помощью Cookies, а «test» использует response.cookies, чтобы получить все файлы cookie в ответ

Удачи вам.

+0

Да, сайт один, у меня есть права на ответ. Я пытаюсь использовать один контроллер для вызова другого контроллера, чтобы получить ответ и файлы cookie со второго контроллера. Я не понимаю, как настройка приготовления в ответ позволяет мне получать куки из WSResponse. Мой второй контроллер уже возвращает ответ с помощью метода withCookies – MrTugay

+0

@MrTugay. Я добавлю в пример код примера. Хотя это написано с помощью scala, вы обнаружите, что это похоже на то, что написано java. Код работал на моей машине. – Jerry

+0

Я сделал это похоже на ваш, но я думаю, что мой код не работает, так как мой «индекс» возвращает URL-адрес перенаправления с 303, так что, возможно, я не получаю ответ, прежде чем перенаправляет меня? – MrTugay

 Смежные вопросы

  • Нет связанных вопросов^_^