gpt4 book ai didi

java - 网络服务不再工作

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:33 25 4
gpt4 key购买 nike

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

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 提供的链接中的 firebug,您可以看到 Content-Encoding == gzip。您应该设置 Accept-Encoding header 。您可以使用 InitationBuilder 上的便捷链方法 acceptEncoding 来完成此操作。所以做类似的事情

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

不确定您正在使用的 JAX-RS 客户端库,但标准客户端 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));

关于java - 网络服务不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28135851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com