1

残りのサービスから gzip コンテンツを解凍するときに、プレイの文字セットの問題と思われるものに直面しています。以下のコード スニペットを実行しようとすると、「Malformed JSON. Illegal character ((CTRL-CHAR, code 31))」というエラーがスローされます。

val url:String = "https://api.stackexchange.com/2.0/info?site=stackoverflow"
Async {
  WS.url(url)
    .withHeaders("Accept-Encoding" -> "gzip, deflate")
    .get()
    .map { response =>
    Ok("Response: " + (response.json \ "items"))
  }
}

最初は StackExchange API 自体の問題かと思いましたが、同様のサービスで gzip 圧縮も利用してみましたが、同様のエラーが発生しました。「不正な文字」がどこにあるのかもわからないので、コードを修正するのは難しいです。何かが欠けているのでしょうか、それとも実際にプレイ中のバグですか?

4

2 に答える 2

0

Play 2.3でそれを行う方法は次のとおりです

// set Http compression: https://www.playframework.com/documentation/2.3.x/ScalaWS
val clientConfig = new DefaultWSClientConfig()
val secureDefaults: AsyncHttpClientConfig = new NingAsyncHttpClientConfigBuilder(clientConfig).build()
val builder = new AsyncHttpClientConfig.Builder(secureDefaults)
builder.setCompressionEnabled(true)
val secureDefaultsWithSpecificOptions: AsyncHttpClientConfig = builder.build()
implicit val implicitClient = new NingWSClient(secureDefaultsWithSpecificOptions)
val response = WS.clientUrl("http://host/endpoint/item").withHeaders(("Accepts-encoding", "gzip")).get()
于 2015-03-30T09:42:02.983 に答える
0

私が提供できる手がかりは、gzip ストリームの最初のバイトが 31 (0x1f) であることです。そのため、gzip ストリームを解凍するには、おそらく何か他のことを行う必要があります。

ちなみに、deflate encoding は受け入れず、gzip のみを使用することをお勧めします。

于 2012-05-27T17:50:40.083 に答える