您好,登錄后才能下訂單哦!
這篇文章主要講解了“使用apache http client調用其他服務器接口時報錯怎么辦”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“使用apache http client調用其他服務器接口時報錯怎么辦”吧!
今天在使用 apache http client 調用 其他服務器的接口的時候, get 請求報錯了
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not parse 'Accept' header [text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8]: Invalid mime type "*/;q=0.8": does not contain subtype after '/' org.springframework.util.InvalidMimeTypeException: Invalid mime type "*/;q=0.8": does not contain subtype after '/'
說是不支持 header 的 accept 類型。 因為這個 服務器的接口默認只支持返回 json 格式的。所以報錯了,修改 http client 的請求header 的 acept 即可
代碼如下:
/** * GET方式提交數據 * * @param url 待請求的URL * @param params 要提交的數據 * @param enc 編碼 * @param resEnc 響應內容的編碼 * @return 響應結果 */ public static String doGet(String url, Map<String, String> params, String enc, String resEnc) { String response = EMPTY; HttpGet getMethod = null; if (StringUtils.isEmpty(url)) { return null; } StringBuffer strtTotalURL = getTotalUrl(url, params, enc); logger.debug("GET請求URL = \n" + strtTotalURL.toString()); try { getMethod = getGetMethod(strtTotalURL.toString()); getMethod.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=" + enc); // 執行getMethod HttpResponse httpResponse = getHttpClient(url).execute(getMethod); response = getResponse(url, httpResponse, resEnc); } catch (ClientProtocolException e) { logger.error("發生致命的異常,可能是協議不對或者返回的內容有問題" + e.getMessage(), e); } catch (IOException e) { logger.error("發生網絡異常" + e.getMessage(), e); } finally { if (getMethod != null) { getMethod.releaseConnection(); getMethod = null; } } return response; } /** * 模擬瀏覽器GET提交 * * @param url * @return */ private static HttpGet getGetMethod(String url) { if (!url.startsWith(HTTP)) { url = "http://" + url; } HttpGet pmethod = new HttpGet(url); // 設置響應頭信息 pmethod.addHeader("Connection", "keep-alive"); pmethod.addHeader("Cache-Control", "max-age=0"); pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) "); // pmethod.addHeader("Accept", // "text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8"); // 設置接收所有類型的,否則如果請求的服務器只支持 application/json 那么就會報錯 pmethod.addHeader("Accept", "*/*"); return pmethod; }
改為 pmethod.addHeader("Accept", "*/*"); 即可
以上的說法是錯的。
從報錯的信息就可以看出, 是 */ 這種寫法 錯誤的。導致header accept 解析不成功。
改為
pmethod.addHeader( "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
完整版
pmethod.addHeader( "Accept", "text/html,application/xhtml+xml,application/xml;application/json,*/*;q=0.9,*/*;q=0.8");
感謝各位的閱讀,以上就是“使用apache http client調用其他服務器接口時報錯怎么辦”的內容了,經過本文的學習后,相信大家對使用apache http client調用其他服務器接口時報錯怎么辦這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。