(其實常常發生XD, 因為http下載檔案的URL可能常常被變更, 所以只要下載有問題時, 都會第一時間照慣例去檢查URL有沒有異動)
但是這次URL變更, 只是從http改成https, 只是多了s讓我找了好苦阿(這時候就覺得瀏覽器聰明多了, 會自己去導向https)
不過呢, 程式有寫try catch, 理應會回傳錯誤訊息, 但是程式卻沒catch到而讓它pass,
經過debug檢查後, 才發現它download下來的是一個"空"的檔案, 所以程式認為有download成功才讓它pass吧!?
我是在程式裡面加了get HTTP status來debug, 發現這case的HTTP status是301(不是常見的403, 404)
這類status似乎是不會被catch!?
- boolean downloadUrlFile(String urlpath, String filepath){
- try {
- String proxyURL="proxy.google.com.tw";
- String proxyPort="3128";
- SocketAddress sa = new InetSocketAddress( proxyURL , Integer.parseInt( proxyPort ) );
- Proxy proxy = new Proxy(Proxy.Type.HTTP, sa);
- URL url = new URL(urlpath);
- //URLConnection conn = url.openConnection(proxy);
- HttpURLConnection conn = (HttpURLConnection)url.openConnection(proxy);
- conn.setConnectTimeout(60000); //60sec, default: 15sec
- conn.setReadTimeout(90000); //90sec, default: 60sec
- conn.connect();
- /* Check Http Status*/
- int status = conn.getResponseCode();
- System.out.println(status);
- switch (status) {
- case java.net.HttpURLConnection.HTTP_GATEWAY_TIMEOUT://504
- System.out.println("連線網址逾時!");
- break;
- case java.net.HttpURLConnection.HTTP_FORBIDDEN://403
- System.out.println("連線網址禁止!");
- break;
- case java.net.HttpURLConnection.HTTP_INTERNAL_ERROR://500
- System.out.println("連線網址錯誤或不存在!");
- break;
- case java.net.HttpURLConnection.HTTP_NOT_FOUND://404
- System.out.println("連線網址不存在!");
- break;
- case java.net.HttpURLConnection.HTTP_OK:
- System.out.println("OK!");
- break;
- }
- java.io.BufferedInputStream in = new java.io.BufferedInputStream(conn.getInputStream());
- java.io.FileOutputStream fos = new java.io.FileOutputStream(filepath);
- java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
- byte[] data = new byte[1024];
- int x=0;
- while((x=in.read(data,0,1024))>=0)
- {
- bout.write(data,0,x);
- }
- bout.close();
- in.close();
- }catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }