最近在使用HttpURLConnection請求到另一個應用去獲取數據,剛開始用下面的url請求數據:html
String url = "http://localhost:8888/example/queryData.do?query=" + "{\"start\":0,\"tableid\":\"EVTS\",\"rows\":10,\"token\":\"76ecc4c399e56792c5fd0905f8ffaa86\"," + "\"order\":{},\"query\":[]}"; HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection(); conn.setDoInput(true); conn.setDoOutput(false); conn.setUseCaches(false); conn.setRequestMethod("GET"); conn.setRequestProperty("Host", "www.awebsite.com"); conn.setRequestProperty("User-Agent", "Mozilla/4.0"); conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); conn.setRequestProperty("Accept-Language", "en-us,en;q=0.5"); conn.setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"); conn.setRequestProperty("Keep-Alive", "115"); conn.setRequestProperty("Connection", "keep-alive"); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder data = new StringBuilder(); String s = ""; while((s = br.readLine()) != null) data.append(s); String pageData = data.toString();
上面的請求很正常,能拿到預計的數據,可是後續url須要增長一個日期時間的入參後,出問題了,修改後的url變成了下面的這樣:java
String url = "http://localhost:8888/example/queryData.do?query=" + "{\"start\":0,\"tableid\":\"EVTS\",\"rows\":10,\"token\":\"76ecc4c399e56792c5fd0905f8ffaa86\"," + "\"order\":{},\"query\":[{"startTime":"2018-03-27 14:00:00","endTime":"2018-03-27 14:30:00"]}";
HttpURLConnection就會報下面的這種錯誤:web
java.io.IOException: <h1>Bad Message 400</h1><pre>reason: Unknown Version</pre>
一直排查都沒有發現先後有什麼問題。app
只能上網找解決辦法, stackoverflow上也有人遇到這問題:ui
解決的辦法就是:把空格用轉譯符號代替。spa
這還真是一個坑,比較隱蔽。code