2017-06-21 97 views
0

在捲曲下面的調用工作是工作,服務器的響應是一個200碼:請求在捲曲而不是在RestTemplate

curl -i -H "Content-Type: application/json" -H "Cookie: wv_sess=emrri58a7f3qauof5ntfsc77k7" -X GET http://192.168.1.1/cli/aos?cmd=show+interfaces+1/1/1 

但是當我嘗試用下面的代碼做同樣與RestTemplate春:

 String cookies = "wv_sess=emrri58a7f3qauof5ntfsc77k7"; 
     RestTemplate restTemplate = new RestTemplate(); 
     HttpHeaders headers = new HttpHeaders(); 
     headers.set("Cookie",cookies); 
     headers.set("Content-Type",MediaType.APPLICATION_JSON_VALUE); 

     HttpEntity<String> entity = new HttpEntity<>(headers); 
     ResponseEntity<String> response = restTemplate.exchange("http://192.168.1.1/cli/aos?cmd=show+interfaces+1/1/1", HttpMethod.GET, entity, String.class); 

     logger.info(response.toString()); 

,我收到了400碼,因此讓HttpClient的崩潰:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException: 400 Bad Request] with root cause 

什t是從curl句子到RestTemplate的等價物嗎? 有人有任何建議來解決它嗎?

注意:我從阿爾卡特6860交換機向WebServices發出請求。

回答

0

我找到了解決方案,非常感謝答覆。

問題是RestTemplate編碼我的URL,我通過Wireshark檢測到它。

由於原網址:

http://192.168.1.1/cli/aos?cmd=show+interfaces+1/1/1 

它得到了替換的「+」符號和以下是結果:

http://192.168.1.1/cli/aos?cmd=show%2Binterfaces%2B1/1/1 

當然如此的服務器檢測到一個無效的網址,並有以400代碼錯誤回答。

爲了解決這個問題,我將編號爲「+」的空格替換爲符號「+」。

0

從你的錯誤:

nested exception is 
org.springframework.web.client.HttpClientErrorException: 400 Bad Request 

它看起來像你的要求正在經歷,以及服務器與400錯誤的請求響應。只要服務器返回4xx錯誤代碼,Spring RestTemplate就會拋出一個HttpClientErrorException

+0

那麼,我在RestTemplate中做了哪些不同的工作,導致它無法工作? 也許問題出在Content-Type屬性上,但我嘗試了很多組合,但仍然無法正常工作。 – Jordi

+0

您是否嘗試過註銷您正在製作的完整請求?做類似於此處所述的內容:https://stackoverflow.com/a/22620168/530728。這應該有助於確定curl請求和RestTemplate請求之間的區別。 – Jan

+0

爲什麼服務器返回400錯誤請求狀態完全取決於服務器......您可以在服務器中啓用詳細日誌或類似的東西嗎? – Jan