繁体   English   中英

Web服务不再起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM