2014-04-12 84 views
0

這是我在stackoverflow上的第一篇文章。 StackOverflow在編碼過程中遇到任何困難時一直是我的幫手。如何確定安全鏈接的下載鏈接?

好了沒有浪費太多的時間,讓我去住在我所堅持的問題,

對於一個項目,我建立了數據庫。

我有超鏈接的數據庫以這種格式,

http://link.xyz.com/?id=108
http://link.xyz.com/?id=109
httpp://link.xyz.com/ ID = 110

等?

這些鏈接在瀏覽器中激活時,將我重定向到下載鏈接,該鏈接開始下載內容。

例子:

當httpp://link.xyz.com/ ID = 108在瀏覽器中打開,它重定向我到下面的網址。

httpp://xyz.com/abc/pqr/some_content.avi [下載鏈接]。

因此,我正在尋找一種解決方案,將我巨大的超鏈接列表轉換爲下載鏈接。

就安全鏈接轉換爲下載鏈接而言,解決方案是可接受的任何編程語言。

我試過在JAVA中使用HttpURLConnection和幾個庫,但沒有成功。

我扔掉了以下異常,

Request URL ... httpp://link.xyz.com/?id=3108 
Response Code ... 403 
java.io.IOException: Server returned HTTP response code: 403 for URL: httpp://link.xyz.com/?id=3108 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at Fetch.main(Fetch.java:56) 
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: httpp://link.xyz.com/?id=3108 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at java.net.HttpURLConnection.getResponseCode(Unknown Source) 
    at Fetch.main(Fetch.java:26) 



P.S上述異常僅由這些環節造成的,在程序運行罰款等環節。

夥計們請幫助,這個問題正在殺死我,我無法在這個項目中取得進展。

注:httpp被故意添加的,因爲我是無法發佈超過2個鏈接

謝謝

+3

403是「禁止」的錯誤代碼 - 網站管理員顯然不希望您使用程序來刮取其內容。你應該尊重它! – Philipp

+0

感謝您的自發回覆,但如果我手動執行,我可以獲得下載鏈接。我只是想自動化手動工作。 – iDJ2012i

+0

來自Wiki ...>狀態碼403響應是Web服務器被配置爲拒絕訪問,由於某種原因,由客戶端請求的資源的結果....你必須找出原因。你認證正確嗎? – user1720897

回答

1

的403 HTTP錯誤代碼是「禁止」的代碼。服務器不希望您訪問該資源。

獲取此響應代碼的一個原因是您尚未登錄。服務器希望您在允許下載前使用用戶名和密碼登錄,可能需要使用HTTP-POST請求登錄,形成在網站上的某個地方。然後,它會在標題中回覆一個Set-Cookie:,其中包含一個會話標識,用作證明您已通過身份驗證的會話標識。它會期望您在任何未來請求的Cookie:標頭中包含相同的值。

另一個原因可能是該網站檢測到您沒有使用網絡瀏覽器並且想阻止您抓取他們的內容。你應該尊重它!當你真的想忽略網站管理員的意願時,你需要找出究竟是什麼導致他們檢測你的程序爲非瀏覽器。它可能只是檢查您的User-Agent標題,但其他數百萬種其他方式可能會導致您的程序行爲有所不同,從而觸發檢測。不知道服務器檢查什麼,就不能給你任何正確的答案。

下一個問題將在重定向之後。您可以通過HTTP狀態代碼301,307或308獲得響應。然後,您會在響應的Location-header中找到真實URL。實現重定向的另一種方式是通過客戶端的Javascript(受下載門戶網站歡迎,因爲它有機會展示更多廣告)。這意味着您將不得不解析內容主體並從其源代碼中提取真實的URL。

+0

'......這個網站顯然檢測出你沒有使用網絡瀏覽器,並且想阻止你刮掉他們的內容......'那個不是導致403.的唯一原因。 – user1720897

+0

@ user1720897我讚賞我的答案與網站只是想要登錄的可能性。 – Philipp

+0

感謝您的解釋..我明白,我需要了解更多關於http響應和請求。 – iDJ2012i