<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
用Java呼叫雪球的API,結果返回的是亂碼,一番研究後發現是因為返回的資料使用了GZIP壓縮,需要先解壓才能得到正確資料。
使用了GZIP壓縮的資料在響應頭裡會有一項名為content-encoding的引數,值為gzip。
Java中可以使用.getHeaderField()讀取響應頭的引數。
如果沒有這項引數,會返回null。
用.getHeaderField("content-encoding")讀取content-encoding引數的值。
如果值不為空,通過值判斷是否用了gzip壓縮。
使用了gzip就解壓,沒用就不處理。
// 獲取響應頭content-encoding資料,如果是gzip就解壓(以後可能要改成部分對比.contains()而不是全部對比) String contentEncoding = conn.getHeaderField("content-encoding"); if((contentEncoding != null)&&(contentEncoding.equals("gzip"))){ is = new GZIPInputStream(conn.getInputStream()); }else{ is = conn.getInputStream(); }
部分地方需要按需修改
import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.zip.GZIPInputStream; public class HttpURLConnectionTools { public String doPost(String URL, String jsonStr) { OutputStreamWriter out = null; BufferedReader in = null; InputStream is = null; StringBuilder result = new StringBuilder(); HttpURLConnection conn = null; try { java.net.URL url = new URL(URL); conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); // 傳送POST請求必須設定為true conn.setDoOutput(true); conn.setDoInput(true); // 設定連線超時時間和讀取超時時間 conn.setConnectTimeout(30000); conn.setReadTimeout(10000); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Accept", "application/json"); // 獲取輸出流 out = new OutputStreamWriter(conn.getOutputStream()); out.write(jsonStr); out.flush(); out.close(); // 取得輸入流,並使用Reader讀取 if (200 == conn.getResponseCode()) { // 獲取響應頭content-encoding資料,如果是gzip就解壓(以後可能要改成部分對比.contains()而不是全部對比) String contentEncoding = conn.getHeaderField("content-encoding"); if((contentEncoding != null)&&(contentEncoding.equals("gzip"))){ is = new GZIPInputStream(conn.getInputStream()); }else{ is = conn.getInputStream(); } in = new BufferedReader(new InputStreamReader(is, "UTF-8")); String line; while ((line = in.readLine()) != null) { result.append(line); System.out.println(line); } } else { System.out.println("ResponseCode is an error code:" + conn.getResponseCode()); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ioe) { ioe.printStackTrace(); } } return result.toString(); } public String doGet(String URL) { HttpURLConnection conn = null; InputStream is = null; BufferedReader br = null; StringBuilder result = new StringBuilder(); try { // 建立遠端url連線物件 URL url = new URL(URL); // 通過遠端url連線物件開啟一個連線,強轉成HTTPURLConnection類 conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); // 設定連線超時時間和讀取超時時間 conn.setConnectTimeout(15000); conn.setReadTimeout(60000); conn.setRequestProperty("accept-encoding","gzip, deflate, br"); conn.setRequestProperty("User-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.62"); // 傳送請求 conn.connect(); // 通過conn取得輸入流,並使用Reader讀取 if (200 == conn.getResponseCode()) { // 獲取響應頭content-encoding資料,如果是gzip就解壓(以後可能要改成部分對比.contains()而不是全部對比) String contentEncoding = conn.getHeaderField("content-encoding"); if((contentEncoding != null)&&(contentEncoding.equals("gzip"))){ is = new GZIPInputStream(conn.getInputStream()); }else{ is = conn.getInputStream(); } br = new BufferedReader(new InputStreamReader(is, "UTF-8")); String line; while ((line = br.readLine()) != null) { result.append(line); System.out.println(line); } } else { System.out.println("ResponseCode is an error code:" + conn.getResponseCode()); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } if (is != null) { is.close(); } } catch (IOException ioe) { ioe.printStackTrace(); } conn.disconnect(); } return result.toString(); } public static void main(String[] args) { System.out.println(new HttpURLConnectionTools().doGet("https://api.66mz8.com/api/weather.php?location=%E5%8C%97%E4%BA%AC")); System.out.println(new HttpURLConnectionTools().doGet("http://api.wpbom.com/api/neran.php")); } }
以上就是Java使用GZIP壓縮導致HTTP請求返回亂碼問題解決的詳細內容,更多關於Java GZIP壓縮HTTP返回亂碼的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45