2013-09-22 3 views
5

Я пытаюсь использовать spray-client и spray-httpx и у меня возникают проблемы, выяснить, как преобразовать заголовки «Set-Cookie» от HttpResponse к «печенье» заголовок, который я хотел бы установить на HttpRequestКак конфертировать из заголовка ответа 'set-cookie' для запроса заголовка 'cookie' в спрее?

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

Я вижу spray.http.HttpHeaders.Cookie, но я вижу, нет способа конвертировать из экземпляра HttpHeader в HttpCookie ...

ответ

10

HttpHeaders.Cookie случай класса с unapply методом. Таким образом, вы можете извлечь его из ответа с простой функцией:

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

Это немного более общий случай, но я думаю, что решение понятно.

Я хотел бы сделать это следующим образом:

// 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

от того, что я могу видеть соответствия должно быть сделано на 'Set-Cookie': валь responseSetCookieHeader: HTTPHeader = ???; responseSetCookieHeader match {case HttpHeader.'Set-Cookie' (c) => println (c.content)}. спасибо, что поставили меня на правильный путь! – Andrey

+0

в основном, я закончил делать: responseSetCookieHeaders map {case HttpHeaders.'Set-Cookie' (c) => s "$ {c.name} = $ {c.content}"} mkString ";", если вы обновите свой ответьте на совпадение в «Set-Cookie» вместо «Cookie». Я соглашусь с ним. – Andrey

+0

@ Andrey Я обновил свой ответ, будет ли это вам подходит? – 4lex1v

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