8

我只是下载了最新版本的jsoup(1.7.1)并按照官方代码(更改了网址)。然后我得到“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 项目中做了同样的事情。

注意: - 我已经添加了 Internet 权限

4

1 回答 1

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() 或 execute() 之前尝试更多设置。

格雷格

于 2012-12-13T16:50:35.100 回答