2012-11-26 133 views
8

我只是下載最新版本的jsoup(1.7.1)並按照官方代碼(更改了url)。然後,我就「HTTP錯誤提取URL」Jsoup http錯誤提取url

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    try { 
     loadData(); 
    } catch (IOException e) { 
     Log.i("error",e.getMessage()); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

public void loadData() throws IOException { 
    Document doc = Jsoup.connect("http://forum.mtr.com.hk/search.php?station=30&cat=&x=25&y=2").get(); 
    String title = doc.title(); 
    Log.i("title",title); 
}} 

什麼是我的代碼的問題嗎?看起來這個錯誤只是在Android項目中發生的,因爲我在一個可以正常工作的Java項目中做同樣的事情。

注: - 我haved添加Internet權限

回答

6

我也有類似的問題。可能是因爲您的設備連接速度太慢,並且connect()函數太早超時,或者可能因爲某些無害的HTTP錯誤狀態而失敗。另外,我的Jsoup連接適用於大多數頁面,但對於某些我收到「HTTP錯誤提取URL。狀態= 307」。原來,這實際上是從Web服務器到另一個URL的重定向請求。我解決了所有這些問題,下面的代碼:

Connection.Response res = Jsoup.connect(sUrl). 
     timeout(5000).ignoreHttpErrors(true).followRedirects(true).execute(); 
if (res.statusCode() == 307) { 
    String sNewUrl = res.header("Location"); 
    if (sNewUrl != null && sNewUrl.length() > 7) 
     sUrl = sNewUrl; 
    res = Jsoup.connect(sUrl). 
      timeout(5000).execute(); 
} 
Document doc = res.parse(); 

希望這有助於,或者至少激勵你調用get之前多試幾個設置()或執行()。

Greg