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));
在我的应用程序中,我必须使用路由 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));