2013-09-22 29 views
5

Tôi đang cố gắng sử dụng spray-clientspray-httpx và tôi đang gặp khó khăn để tìm hiểu làm thế nào để chuyển đổi tiêu đề 'đặt cookie' từ HttpResponse đến một tiêu đề 'cookie' mà tôi muốn đặt trên một HttpRequestLàm cách nào để chuyển đổi từ tiêu đề 'set-cookie' phản hồi để yêu cầu tiêu đề 'cookie' trong phun?

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

tôi thấy spray.http.HttpHeaders.Cookie, nhưng tôi thấy không có cách nào để chuyển đổi từ một thể hiện của HttpHeader-HttpCookie ...

Trả lời

10

HttpHeaders.Cookie là một lớp hợp với một phương pháp unapply. Vì vậy, bạn có thể trích xuất nó từ phản hồi với một hàm đơn giản:

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

Đó là một trường hợp tổng quát hơn một chút, nhưng tôi nghĩ giải pháp là rõ ràng.

tôi sẽ làm điều này theo cách sau:

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

từ những gì tôi có thể thấy phù hợp nên được thực hiện trên 'Set-Cookie': val responseSetCookieHeader: HttpHeader = ???; responseSetCookieHeader match {case HttpHeader.'Set-Cookie' (c) => println (c.content)}. cảm ơn vì đã cho tôi đi đúng hướng! – Andrey

+0

về cơ bản, tôi đã kết thúc làm: responseSetCookieHeaders map {case HttpHeaders.'Set-Cookie' (c) => s "$ {c.name} = $ {c.content}"} mkString ";" nếu bạn cập nhật câu trả lời với kết hợp trên "Set-Cookie" thay vì "Cookie" tôi sẽ chấp nhận nó – Andrey

+0

@Andrey tôi đã cập nhật câu trả lời của tôi, theo cách này sẽ phù hợp với bạn? – 4lex1v

Các vấn đề liên quan