球衣:从网络服务接收响应为json文件

时间:2013-09-27 17:55:14

标签: java json web-services jersey jersey-client

nni使用jersey客户端调用Web服务时出现问题。 我尝试成功测试:“http://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20location%3D%2248907%22&format=json

使用此代码:

Client client = Client.create();
WebResource webResource = client.resource("http://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20location%3D%2248907%22&format=json");
ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
String json = response.getEntity(String.class);
System.out.println(json);

但是当我打电话给amazon webservice时,我无法做到:http://ws.amazon.com/widgets/q?Operation=GetResults&Keywords=cool&SearchIndex=All&multipageStart=0&InstanceId=0&multipageCount=10&TemplateId=8002&ServiceVersion=20070822&MarketPlace=US

是因为,我得到一个json文件作为响应吗?

请帮忙吗?

1 个答案:

答案 0 :(得分:0)

在尝试使用各种表单HTTP请求的Amazon Web服务之后。我终于发现问题是由于HTTP标头中发送的User-Agent值。

出于某种原因,Amazon Rest Service无法处理句点字符的存在。在User-Agent下的HTTP标头中。

发送HTTP请求时。如下

GET http://ws.amazon.com/widgets/q?Operation=GetResults&Keywords=cool&SearchIndex=All&multipageStart=0&InstanceId=0&multipageCount=10&TemplateId=8002&ServiceVersion=20070822&MarketPlace=US HTTP/1.1
User-Agent: Java.
Host: ws.amazon.com
Connection: keep-alive

Amazon WS发送没有正文内容的HTTP响应

HTTP/1.1 200 OK
Date: Fri, 27 Sep 2013 19:29:54 GMT
Server: Server
Content-Length: 0
Vary: Accept-Encoding,User-Agent
Cneonction: close
Content-Type: text/plain

如果。从Content-Type中删除,响应正文确实包含详细的Json内容。这很可能看起来像是亚马逊休息服务实施的一个问题。

您可以按如下方式更改代码,以查看Json内容并解决问题

 ClientResponse response = webResource.header("User-Agent", "SomeAgentNameWithoutPeriodChar").get(ClientResponse.class);