簡體   English   中英

java.net.URL和java.net.URLConnection的奇怪問題

[英]strange problem with java.net.URL and java.net.URLConnection

我正在嘗試從URL下載圖像。 我編寫的過程適用於每個人,除了我們正在處理的一個內容提供商之外。

當我通過Firefox訪問其JPG時,所有內容看起來都清晰(快樂的逾越節,順便說一句)。 但是,當我使用自己的流程時,我要么:

A)得到404或

B)在調試器中,當我在URL行上設置斷點(URL url = new URL(str);)時,在連接后我確實得到了一個文件,但它不是.jpg,而是一些它們是的HTML使用通用鏈接和內容進行制作。 不過,我沒有看到重定向代碼! 它回到200。

這是我的代碼...

URL url = new URL(urlString);               
URLConnection uc = url.openConnection();        
String val = uc.getHeaderField(0);
System.out.println("FOUND OBJECT OF TYPE:" + contType);
if(!val.contains("200")){                         
  //problem
}
else{
    is = uc.getInputStream();
}

有人看到過這種性質的東西嗎? 我在想,也許這是一些啞劇類型的問題,但這只是一個總的猜測……我完全感到困惑。

也許網站只是在使用某種保護措施,以防止他人熱鏈接其圖像或禁止大量下載。

他們通常檢查HTTP引薦來源網址(必須來自其自己的域)或用戶代理(必須是瀏覽器,而不是下載管理器)。 設置兩個並重試。

您是否嘗試過使用WireShark來確切查看正在往返的數據包? 這通常是最快的方法來了解不同之處。 那是:

  1. 使用FireFox獲取GIF時,首先運行WireShark,然后
  2. 運行WireShark以使用您的代碼來獲取它。

然后在兩個方向上對數據包進行比較和對比,我幾乎保證您會在HTTP標頭或流量的其他部分看到不同的內容來解釋問題。

if(!val.contains("200")) // ...

首先,我建議您使用這個有用的類HttpURLConnection ,它提供方法getResponseCode()

在整個數據中搜索“ 200”表示

  1. 性能問題,以及
  2. 不一致(二進制文件可以包含一些“ 200”)

所有好的猜測,但我認為“正確”的答案是必須去ivan_pertrovich_ivanovich_harkovich_rostropovitch_o'neil,因為使用HttpURLConnection可以看到,實際上,在獲得404之前,我首先得到了301。現在,只需從這些人那里找出他們在標題中的期望,這將使他們不太願意重定向我。

謝謝你的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM