J'utilise DataBinder expédition pour faire des requêtes HTTP qui fonctionne bien, tant que le serveur Web retourne un 404.expédition DataBinder: Obtenez le contenu non compressé d'une 403 réponse
Si la requête échoue, le serveur Web renvoie une 403 code d'état et fournit un message d'erreur détaillé dans le corps de la réponse en tant que XML.
Comment lire le corps xml (indépendamment du 403), par ex. comment puis-je faire dépêche ignore toutes les erreurs 403?
Mon code ressemble à ceci:
class HttpApiService(val apiAccount:ApiAccount) extends ApiService {
val http = new Http
override def baseUrl() = "http://ws.audioscrobbler.com/2.0"
def service(call:Call) : Response = {
val http = new Http
var req = url(baseUrl())
var params = call.getParameterMap(apiAccount)
var response: NodeSeq = Text("")
var request: Request = constructRequest(call, req, params)
// Here a StatusCode exception is thrown.
// Cannot use StatusCode case matching because of GZIP compression
http(request <> {response = _})
//returns the parsed xml response as NodeSeq
Response(response)
}
private def constructRequest(call: Call, req: Request, params: Map[String, String]): Request = {
val request: Request = call match {
case authCall: AuthenticatedCall =>
if (authCall.isWriteRequest) req <<< params else req <<? params
case _ => req <<? params
}
//Enable gzip compression
request.gzip
}
}
Le problème est que le contenu est le contenu brut gzippé. Habituellement j'utilise val dans tous les endroits où je peux. – user3001
Existe-t-il un moyen de transmettre le contenu aux gestionnaires gzip et xml que j'ai définis auparavant? Ce que je veux, c'est que le contenu de l'erreur soit décompressé et analysé comme XML – user3001
Je ne peux pas trouver 'StatusCode (code, contenu)' dans la dernière version de dispatch (0.11.2), il n'y a que 'StatusCode (code)' . – null