2013-09-27 70 views
0

nni在使用球衣客戶端調用Web服務時遇到問題。 我成功嘗試與測試:「http://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20location%3D%2248907%22&format=json球衣:從網絡服務接收響應爲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); 

,但我不能做到這一點,當我打電話亞馬遜Web服務: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文件作爲迴應?

任何幫助嗎?

回答

0

用各種形式的HTTP請求試驗Amazon Web服務之後。我終於明白,問題是由於HTTP頭中發送的User-Agent值。

由於某種原因,Amazon Rest Service無法處理週期字符的存在。在User-Agent下的HTTP Header中。

發送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 

亞馬遜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); 
+0

沒了就完事,我什麼也沒有 – user2762275

+0

它還返回一個JSONP。在解析之前,我一直都要過濾它。 –

+0

我強烈建議Fiddler測試這些服務。如果在Linux上,使用wireshark。 –