http 400錯誤【原】


http 400錯誤現象:

使用java代碼訪問某PDF文件地址, 報了http 400錯誤 ,瀏覽器卻能正常訪問 . 所以猜測瀏覽器對地址做了額外處理. 

 

異常代碼

String srcUrl = "http://www.abc.com/王小丫/go/home";
InputStream inputStream = new URL(srcUrl).openStream();

 

上述URL類的openStream()方法內部其實還是用到了URLConnection openConnection(URL u);

其實代碼本身是沒有任何問題的, 錯就錯在這個地址含有中文上了. 我的請求地址類似於http://www.abc.com/王小丫/go/home

 

解決方法

現在我們重點是需要對 http://www.abc.com/  之后的 "王小丫/go/home" 做URLEncoder.encode(srcString, "UTF-8"); 處理. (其實重點只在"王小丫"這三個字上,但是為了以防路徑中其它地址又存在中文,所以還是對域名www.abc.com/之后的所有路徑全encode更保險.

 

使用與正則解析並處理后,得到的URL將是: http://www.abc.com/%E7%8E%8B%E5%B0%8F%E4%B8%AB%2Fgo%2Fhome

public static String handleUrl(String url) {
        if (url != null) { Pattern p = Pattern.compile("(http://.*?/)(.*)"); Matcher m = p.matcher(url); if (m.find()) { String str1 = m.group(1).trim(); String str2 = m.group(2).trim(); try { str2 = URLEncoder.encode(str2, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } url = str1 + str2; } } return url; }

 

這個時候再用 以下代碼去獲取InputStream就再也不會報錯了.

String srcUrl = "http://www.abc.com/%E7%8E%8B%E5%B0%8F%E4%B8%AB%2Fgo%2Fhome";
InputStream inputStream = new URL(srcUrl).openStream();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM