Web 服务不再工作

the web service does not work anymore

在我的应用程序中,我必须使用路由 Web 服务并且我使用 OSRM 服务器 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"

在@scai提供的link中查看firebug,可以看到Content-Encoding == gzip。你应该设置 Accept-Encoding header。您可以在 InvocationBuilder 上使用便利链方法 acceptEncoding 来做到这一点。所以做一些像

    WebTarget target = client.target(uri);
    String response = target.request()
            .accept("application/json")
            .acceptEncoding("gzip")
            .get(String.class);

不确定您使用的 JAX-RS 客户端库,但是标准客户端 API 没有任何 filters/interceptors 来解码 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));