2016-05-16 8 views
1

Ich bin neu in der Verwendung des Play Framework und WSClient darin. Ich habe beim Versuch ein Problem festgestellt.Abspielen WSResponse hat keine Cookies oder Header von WSRequest

habe ich eine Anfrage mit WS.url ("urlhere") withHeaders ("Cookie -> cookieIuse").. Get()

Mit der Antwort von diesem Anruf ich die Cookies verwenden Anruf und überprüft die Größe der Reihe von Cookies, aber es endete damit, 0 zu sein!

Ich stellte sicher, dass die Anfrage korrekt durchgeführt wurde und es war! Mein Code sollte mit Cookies geantwortet haben, da ich die withCookies verwendet habe, um Cookies zurückzugeben. Irgendwelche Ideen? Ich habe meinen Code getestet und befolgt und alles ist korrekt, außer dass keine Cookies oder Header von withCookies an die WSResponse zurückgegeben werden.

Dank

Antwort

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

, die das Cookie in der Anfrage, nicht in Reaktion setzt. Wenn Sie einen Cookie von der Antwort erhalten möchten, sollten Sie den Cookie als Antwort in Ihrem Controller festlegen, nicht die Anfrage mit dem folgenden Code.

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

die Referenz ist hier https://www.playframework.com/documentation/2.5.x/JavaResponse

Eine andere Sache ist, dass, wenn die „urlhere“ url nicht Ihre eigene Website ist, können Sie keine Rechte haben die Antwort für den Betrieb, die von der Serverseite zurückgeführt wird und kann auch nur im Server-Ende geändert werden.

Update:

einige Beispiele geben für Sie, den scala Code folgt und die Java sieht genauso aus wie es

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") 
} 
} 

in dem obigen Beispiel 'Test' Aktion wird Index nennen mit WS. Der 'Index' gibt die Antwort mit Cookies und 'test' verwendet die response.cookies, um alle Cookies in Antwort

Viel Glück mit dir zu erhalten.

+0

Ja, die Website ist eine Ich habe Rechte an der Antwort. Ich versuche, einen Controller zu verwenden, um einen anderen Controller aufzurufen, um die Antwort und Cookies vom zweiten Controller zu erhalten. Ich verstehe nicht, wie das Kochen in der Antwort erlaubt mir, die Cookies von der WSResponse zu bekommen. Mein zweiter Controller gibt bereits eine Antwort mit der Methode withCookies – MrTugay

+0

@MrTugay Ich habe einige Beispielcode in die Antwort hinzufügen. Obwohl es mit Scala geschrieben ist, werden Sie feststellen, dass es aussieht wie das, was von Java geschrieben wird. Der Code hat in meiner Maschine funktioniert. – Jerry

+0

Ich habe es ähnlich wie deins gemacht, aber ich denke, dass mein Code nicht funktioniert, da mein "index" eine Weiterleitungs-URL mit 303 zurückgibt, also bekomme ich vielleicht nicht die Antwort, bevor er mich umleitet? – MrTugay