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;
}
由於自己能力還有限,如果有錯誤的地方歡迎指教!