0

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);

但是当我调用亚马逊网络服务时我不能这样做: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 文件作为响应吗?

请问有什么帮助吗?

4

1 回答 1

0

在使用各种形式的 HTTP 请求对 Amazon Web 服务进行试验之后。我终于发现问题出在 HTTP Header 中发送的 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 内容。这很可能看起来像是 Amazon Rest Service 实施的问题。

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

 ClientResponse response = webResource.header("User-Agent", "SomeAgentNameWithoutPeriodChar").get(ClientResponse.class);
于 2013-09-27T17:59:24.140 回答