1. 程式人生 > >wget下載網路url檔案

wget下載網路url檔案

前段時間,接到一個專案,需要用到下載網路url檔案,以https開頭的網路檔案需要證書,即用其他技術可能會受限!廢話不多說了,直接上自己遇到的問題以及解決的辦法

問題:如果下載的url是跳轉url,例如:http://apps.wandoujia.com/redirect?signature=c28fa89&url=http%3A%2F%2Fapk.wandoujia.com%2F7%2F2a%2F7d51e4c1b947f893a7c3fb92c1df02a7.apk&pn=com.animoca.google.robo5&md5=7d51e4c1b947f893a7c3fb92c1df02a7&apkid=4994733&vc=7&size=37262123(當然該url是轉義過的,需要先轉義回來),結果用wget下載就是下載不了。重定向後正常下載

解決方案:

先將url轉義回來,然後進行重定向,即可下載:

程式碼如下(先將url轉義回來,然後進行重定向,如果url本生沒有重定向,執行重定向程式碼後,值不變):

//重定向程式碼

public static String getRedirUrl(String url){
        url = urldecode(url);
        try{
            HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();  
            conn.setInstanceFollowRedirects(false);  
            conn.setConnectTimeout(5000);
            String redirUrl=conn.getHeaderField("Location");
            if(redirUrl==null){
                System.out.println("URL不存在重定向:"+url);
                return url;
            }else{        
                System.out.println("url被重定向,地址:"+conn.getHeaderField("Location"));
                return redirUrl;
            }         
        }catch(Exception e){
            System.out.println("URL處理失敗:"+url);
            e.printStackTrace();           
        }
        return null;
    }
    //轉義
    public static String urldecode(String str){
        try {
            String result = URLDecoder.decode(str, "utf-8");
            System.out.println("轉義後的URL:"+result);
            return result;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
        
    }

由於自己能力還有限,如果有錯誤的地方歡迎指教!