![](/img/trans.png)
[英]Retrieve the redirected URL of a specific URL, with Java / HttpURLConnection
[英]Retrieve redirected URL with Java / HttpURLConnection
給定一個URL(字符串引用),我試圖按以下方式檢索重定向的URL:
HttpURLConnection con = (HttpURLConnection)new URL(ref).openConnection();
con.setInstanceFollowRedirects(false);
con.setRequestProperty("User-Agent","");
int responseType = con.getResponseCode()/100;
while (responseType == 1)
{
Thread.sleep(10);
responseType = con.getResponseCode()/100;
}
if (responseType == 3)
return con.getHeaderField("Location");
return con.getURL().toString();
我遇到了幾個(概念上和技術上的)問題:
概念問題:
技術問題:
您能否建議如何解決上述兩個問題,以獲取用於“最終” URL的“ 100%證明”代碼?
請忽略響應碼為4xx或5xx(或1xx / 2xx / 3xx以外的其他值)的情況。
謝謝
概念問題 :
0.)是否可以重用一個URLConnection
或HttpURLConnection
對象?
不,您不能重用此類對象。 您可以使用它一次獲取一個URL的內容。 您不能使用它來檢索另一個URL,也不能兩次獲取內容(在網絡級別上說)。
如果要獲取另一個URL或第二次獲取URL,則必須再次調用URL
類的openConnection()
方法來實例化新的連接對象。
1.)何時實際連接URLConnection?
方法名稱openConnection()
具有誤導性。 它僅實例化連接對象。 它在網絡級別不執行任何操作。
在網絡級別上的交互從此行開始,它隱式地連接了連接(=打開引擎蓋下的TCP套接字,並發送和接收數據):
int responseType = con.getResponseCode()/100;
。
或者,您可以使用HttpURLConnection.connect()
顯式連接連接。
2.) setInstanceFollowRedirects
如何工作?
setInstanceFollowRedirects(true)
導致一次又一次“隱藏”獲取URL,直到出現非重定向響應為止。 通過調用getResponseCode()
返回非重定向響應的響應代碼。
更新 :
是的,如果您不想自己擔心重定向,則可以編寫簡單的代碼。 您可以簡單地打開電源以跟隨重定向,然后您可以讀取重定向到的位置的最終響應,就好像沒有發生重定向一樣。
在評估響應代碼時,我會更加謹慎。 並非每一個3xx代碼都會自動重定向。 例如,代碼304僅代表“未修改”。
在這里查看原始定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.