2013-09-22 11 views
5

Ja próbuje użyć spray-client i spray-httpx i mam problemy zastanawianie się, jak konwertować nagłówków „set-cookies” z HttpResponse do „cookies” nagłówku, że chciałbym, aby ustawić na zasadzie HttpRequestJak przekonwertować z nagłówka "set-cookie" odpowiedzi na żądanie nagłówka "cookie" w sprayu?

val responseSetCookieHeaders = response.headers filter { _.name == "Set-Cookie" } 
... 
val requestCookieHeader:HttpHeader = ??? 
... 
addHeader(requestCookieHeader) ~> sendReceive ~> { response => ??? } 

widzę spray.http.HttpHeaders.Cookie, ale nie widzę sposób przekonwertować z instancji HttpHeader do HttpCookie ...

Odpowiedz

10

HttpHeaders.Cookie jest klasą przypadku metody unapply. Możesz więc wydobyć go z odpowiedzi za pomocą prostej funkcji:

def getCookie(name: String): HttpHeader => Option[HttpCookie] = { 
    case Cookie(cookies) => cookies.find(_.name == name) 
} 

To trochę bardziej ogólny przypadek, ale sądzę, że rozwiązanie jest jasne.

Chciałbym to zrobić w następujący sposób:

// some example response with cookie 
val httpResponse = HttpResponse(headers = List(`Set-Cookie`(HttpCookie("a", "b")))) 

// extracting HttpCookie 
val httpCookie: List[HttpCookie] = httpResponse.headers.collect { case `Set-Cookie`(hc) => hc } 

// adding to client pipeline 
val pipeline = addHeader(Cookie(httpCookie)) ~> sendReceive 
+0

z tego co widzę dopasowanie powinno być wykonane na 'Set-Cookie': val responseSetCookieHeader: HttpHeader = ???; responseSetCookieHeader dopasować {case HttpHeader .Set-Cookie' (c) => println (c.content)}. dziękuję za postawienie mnie na właściwej drodze! – Andrey

+0

zasadniczo zakończyłem wykonywanie: responseSetCookieHeaders map {case HttpHeaders .Set-Cookie' (c) => s "$ {c.name} = $ {c.content}"} mkString ";" jeśli zaktualizujesz odpowiedź z dopasowaniem na "Set-Cookie" zamiast "Cookie" Przyjmuję to – Andrey

+0

@Andrey Zaktualizowałem swoją odpowiedź, czy ten sposób ci odpowiada? – 4lex1v

Powiązane problemy