2016-06-28 102 views
-1

我在嘗試對圖像的Url執行任何操作(無論是獲取文件大小還是下載它)時出現錯誤403,但我沒有嘗試顯示圖像時出現任何錯誤。嘗試下載圖像時出現錯誤403但未顯示

我希望我足夠清楚,但如果需要的話,這是擺在URL問題的一個示例:

Image URL/Site show the image

我使用此代碼獲取文件大小偉大的工程但不是在這個網站爲例:

public void getFileSize(string uri) 
{ 
    try 
    { 
     waitGetSize = 0; 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 
     req.Timeout = 5000; 
     req.Method = "HEAD"; 
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
     imgSize = resp.ContentLength; 
     imgSizeKb = imgSize/1024; 
     waitGetSize = 1; 
    } 
    catch (Exception ex) 
    { 
     MetroMessageBox.Show(this, ex.Message, "Exception :", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

正如cFrozenDeath指出的,我用了一個HEAD請求,所以我試圖用GET請求完全相同的效果。通過簡單地不說明我想要的請求類型,結果相同。

那麼有沒有辦法獲得文件大小或至少下載文件,知道它在瀏覽器中打開時顯示OK?

+1

聽起來像你沒有權限下載圖像 –

+1

也不是我本地。 –

+2

當您使用瀏覽器時,您發送GET請求,而不是HEAD請求。有很大的差異。 –

回答

0

當您想要從網站上刮取內容時,您必須模仿網頁瀏覽器。

有時這意味着您需要提供和/或保留Cookies當您初次登陸網站時,有時您必須告訴網絡服務器哪個頁面鏈接到資源。

在這種情況下,需要提供在報頭中Referer

public void getFileSize(string uri) 
{ 
     HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri); 
     // which page do we want that server to believe we call this from 
     req.Referer = "http://www.webtoons.com/"; 

     req.Timeout = 5000; 
     req.Method = "GET"; // or do a HEAD  
     HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 
     // rest omitted 
} 

即特定圖像具有273073字節的長度。

請注意,抓取內容可能違反特定網站的服務條款。確保你不會做非法的事情。

+0

感謝您的詳細回覆! 我也會檢查它是否違反了他們的ToS。 謝謝! –

相關問題