2

Http4s ライブラリを使用して、REST Web サービスへの HTTP 呼び出しを行っています。残りの Web サービスでは、認証 Cookie を設定する必要があります。

この Cookie を設定するために、次のコードを作成しました。

val client = PooledHttp1Client()
val uri = Uri.uri("http://localhost/restService")
val req = Request(GET, uri)
req.headers.put(`Content-Type`(MediaType.`application/json`))
val cookie = org.http4s.Cookie("foo_session", getLoginSessionId, domain = Some("localhost"), path=Some("/"))
req.headers.put(org.http4s.headers.Cookie(cookie))    
val task = client.expect[Response](req)
val list = task.run
list.response.foreach(println)
client.shutdownNow()

このコードを実行すると、401 エラーが発生します。これは、Cookie が設定されたことを Web サービスが認識していないことを意味します。

ここで、Apache http クライアントを使用して同じコードを記述したとします。その後、すべて正常に動作します。以下のコードは、上記とまったく同じことを行っています。

  val get = new HttpGet(s"http://localhost/restService")
  get.setHeader("Content-type", "application/json")
  val client = new DefaultHttpClient()
  val respHandler = new BasicResponseHandler
  val cookieStore = new BasicCookieStore()
  val cookie1 = new BasicClientCookie("foo_session", getLoginSessionId)
  cookie1.setDomain("localhost")
  cookie1.setPath("/")
  cookieStore.addCookie(cookie1)
  val localContext = new BasicHttpContext()
  localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore)
  localContext
  val responseString = client.execute(get, respHandler, cookieContext)
  val list = parse(responseString).extract[Response]
  list.response.foreach(println)
  list.response
4

2 に答える 2