在我的应用程序中,我必须使用路由Web服务,并且我使用OSRM Server API
https://github.com/Project-OSRM/osrm-backend/wiki/Server-api
我不知道为什么,但直到昨天早晨服务器-api工作。现在它不起作用,它给了我一个糟糕的请求
http://router.project-osrm.org/viaroute?loc= “+ p.getLat()+”, “+ p.getLon()+” &安培; LOC = “+ d.getLat()+”,“+ d.getLon(); 我使用java和REST协议
String sito="http://router.project-osrm.org/viaroute?loc="+p.getLat()+","+p.getLon()+"&loc="+d.getLat()+","+d.getLon()";
Client client = ClientBuilder.newClient();
WebTarget target = client.target(sito);
Response res = target.request().get();
System.out.println(res.readEntity(String.class));
我获得了“BAD GATEWAY”
答案 0 :(得分:0)
在@scai提供的链接中查看firebug,您可以看到Content-Encoding
== gzip
。您应该设置Accept-Encoding
标头。您可以使用acceptEncoding
上的便捷链方法InvocationBuilder
来完成此操作。所以做一些像
WebTarget target = client.target(uri);
String response = target.request()
.accept("application/json")
.acceptEncoding("gzip")
.get(String.class);
不确定您正在使用的JAX-RS客户端库,但stadard Client API没有任何过滤器/拦截器来解码gzip,但如果您使用的是Jersey客户端,那么您可以注册{ {1}}与客户。
GZipEncoder
经过测试,这对我来说很好。在进行上述更改之前,您遇到了同样的问题。
如果您不使用Jersey,我确定您使用的实施应该有一些GZIP过滤器。我知道Resteasy会这样做。如果您的实现没有,您可以始终使用Java的GZIPInputStream
来包装响应流
client.register(org.glassfish.jersey.message.GZipEncoder.class);