日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记录一次httpClient下载文件的坑

發布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记录一次httpClient下载文件的坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用httpClient模擬瀏覽器下載文件的代碼,網上是很多的,自己copy了一個就高興的用起來,下載了幾百個文件之后,MD發現所有下載的文件都是損壞的、根本打不開,這TM就尷尬了啊,用瀏覽器下載是沒問題的啊。

下面看一下當時用的代碼:

private static void down(String url, String path, int index) {CloseableHttpClient httpclient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);// 這個地方根據瀏覽器里的內容復制過來httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");httpGet.setHeader("Connection", "keep-alive");httpGet.setHeader("Cookie", "XXXXX瀏覽器里的cookie復制過來就可以");httpGet.setHeader("Host", "XX.XX.XX");try {CloseableHttpResponse response = httpclient.execute(httpGet);HttpEntity httpEntity = response.getEntity();InputStream in = httpEntity.getContent();String fileName = getFileName(response);File file = new File(path + fileName);FileOutputStream fOut = new FileOutputStream(file);// IOUtils.copy(in,fOut);byte[] buffer = new byte[4*1024];while (in.read(buffer) != -1) {fOut.write(buffer);}fOut.flush();in.close();fOut.close();System.out.println(index+"=============ok================" + path + fileName);} catch (IOException e) {e.printStackTrace();}}

坑就坑在這個地方:

while (in.read(buffer) != -1) {fOut.write(buffer); }

httpClient傳輸過來的流不一定會每次把 byte[] buffer寫滿,這種寫法在本地復制文件的時候是可以的,但是網絡流上就會出大問題,也就是out.write()的起終點沒有顯示的指定而是默認取buffer.length,每次緩存基本上都是讀不滿的,所以導致寫入大量的空流到文件中。這也長了個教訓,以后在調用API的時候能顯示指定的就不要用默認值,你不知道會出什么問題。

正確的寫法是這樣的:

int n = 0; while ((n=in.read(buffer)) != -1) {fOut.write(buffer,0,n); }

或者有工具類可以用 IOUtils.copy(in,out);這個方法里的實現是一樣的。

?

另外:獲取文件名的方法附上:

private static String getFileName(CloseableHttpResponse response) {String fileName = "";Header header = response.getFirstHeader("Content-disposition");//System.out.println(JSONObject.toJSONString(response));//System.out.println(JSONObject.toJSONString(header));if (header != null) {HeaderElement[] headerElements = header.getElements();NameValuePair nameValuePair = headerElements[0].getParameterByName("filename");fileName = nameValuePair.getValue();//System.out.println("============fileName==============" + fileName);//System.out.println(nameValuePair.getName());}return fileName;}

?

總結

以上是生活随笔為你收集整理的记录一次httpClient下载文件的坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲影音先锋 | 俺来也在线视频 | 国产美女菊爆在线播放APP | 国产精品久久久久久久久动漫 | 亚洲啊v在线 | 亚洲黄色短视频 | 欧美 日本 国产 | 国产人妻久久精品一区二区三区 | 男人天堂网在线 | 精品国产1区 | 九色网址 | 青青青手机在线视频 | 狠狠爱夜夜操 | 中文字幕视频在线观看 | 99热99| 成人黄色录像 | 免费成人激情视频 | 亚洲一区二区国产精品 | 蜜桃视频一区二区三区 | 天堂在线中文在线 | 免费成年人视频在线观看 | 加勒比色综合 | 开心六月婷婷 | 香蕉视频91| 777米奇影视第四色 五月丁香久久婷婷 | 国产精品网站入口 | 亚洲午夜片 | 亚洲精品免费视频 | 久久国产视频精品 | 国产精品成人一区二区三区电影毛片 | 黄色片在线免费看 | 特黄做受又粗又大又硬老头 | 特黄级 | 色国产视频 | 一区二区三区 中文字幕 | 爆操巨乳 | 少妇精品亚洲一区二区成人 | 一级特黄视频 | 欧美精品乱码视频一二专区 | 四虎影院免费 | 国产精品大屁股白浆一区 | 日日摸夜夜添夜夜添高潮喷水 | 精品小视频在线观看 | 五月天激情丁香 | 国产精品污视频 | 找个毛片看看 | 久久久久久久亚洲精品 | 欧美亚洲色综久久精品国产 | 欧美成人精品一区二区三区 | 视频在线观看免费大片 | 国产伦精品一区二区. | 日韩精品福利 | 国产天天射 | 欧美日韩另类在线 | 亚洲性色视频 | 欧美日韩人妻精品一区 | 日日日操 | 色哟哟免费视频 | 张柏芝亚洲一区二区三区 | 日韩精品人妻无码一本 | 毛片毛片毛片毛片毛片毛片 | 日韩精品视频免费在线观看 | 538国产精品一区二区 | 在线一二区 | 亚洲欧美自拍一区 | heyzo朝桐光一区二区 | 国产精九九网站漫画 | 日本中文字幕网站 | 色老头一区二区三区在线观看 | 国产精品视频www | 精品国精品国产 | 成人av在线网址 | 国产一二三四五区 | av嫩草 | 中文字幕一区二区三区四区不卡 | 三级网站视频 | 欧美 日韩 国产 成人 在线观看 | 午夜免费播放观看在线视频 | 欧美wwwwww | 日本少妇影院 | 欧美性猛交ⅹ乱大交3 | 午夜88 | 久久水蜜桃 | 未满十八岁禁止进入 | 三级福利 | 欧美成人精品在线 | 色婷婷婷婷色 | xxxwww国产| 成人黄色三级 | 国产精品毛片久久久久久 | 91视频插插插 | 久久综合加勒比 | 香港三级韩国三级日本三级 | 国产在线看片 | 国产xxxx性hd极品 | 成人激情视频在线观看 | 人人爱人人看 | 久久精品视频免费看 | 色视频在线免费观看 |