[英]the web service does not work anymore
在我的应用程序中,我必须使用路由Web服务,并且必须使用OSRM Server API
https://github.com/Project-OSRM/osrm-backend/wiki/Server-api
我不知道为什么,但是直到昨天早上才对Server-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));
我获得了“坏网关”
在@scai提供的链接中查看firebug,您可以看到Content-Encoding
== gzip
。 您应该设置Accept-Encoding
标头。 您可以使用InvocationBuilder
上的便捷链方法acceptEncoding
来实现。 所以做类似的事情
WebTarget target = client.target(uri);
String response = target.request()
.accept("application/json")
.acceptEncoding("gzip")
.get(String.class);
不确定您使用的JAX-RS客户端库,但stadard客户端API并未附带任何用于过滤gzip的过滤器/拦截器,但是如果您使用的是Jersey客户端,则可以向客户端注册GZipEncoder
。
client.register(org.glassfish.jersey.message.GZipEncoder.class);
经过测试,对我来说效果很好。 进行上述更改之前,您遇到了与您相同的问题。
如果您不使用Jersey,我确定您所使用的任何实现都应具有一些GZIP过滤器。 我知道Resteasy会的。 如果您的实现没有实现,则始终可以使用Java的GZIPInputStream
包装响应流
Response response = target.request()
.accept("application/json")
.acceptEncoding("gzip")
.get();
GZIPInputStream is = new GZIPInputStream(
response.readEntity(InputStream.class));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.