Java Jsoup 下载 torrent 文件

Posted

技术标签:

【中文标题】Java Jsoup 下载 torrent 文件【英文标题】:Java Jsoup downloading torrent file 【发布时间】:2018-07-26 20:21:12 【问题描述】:

我遇到了一个问题,我想连接到这个网站 (https://ww2.yggtorrent.is) 下载 torrent 文件。我已经通过运行良好的 Jsoup 制作了一种连接到网站的方法,但是当我尝试使用它来下载 torrent 文件时,网站返回“您必须连接到下载文件”。

这是我的连接代码:

Response res = Jsoup.connect("https://ww2.yggtorrent.is/user/login")
            .data("id", "<MyLogin>", "pass", "<MyPassword>")
            .method(Method.POST)
            .execute();

这是我下载文件的代码

Response resultImageResponse = Jsoup.connect("https://ww2.yggtorrent.is/engine/download_torrent?id=285633").cookies(cookies)
                                    .ignoreContentType(true).execute();

FileOutputStream out = (new FileOutputStream(new java.io.File("toto.torrent")));
out.write(resultImageResponse.bodyAsBytes());
out.close();

我已经测试了很多东西,但现在我不知道。

【问题讨论】:

可能是身份验证问题? 否,因为我用错误的密码进行了测试,它返回了一个错误 但是您确定您的身份验证通过了吗? 是的,因为它返回给我说“欢迎回来”的 html 代码 【参考方案1】:

您没有在代码中向我们展示的唯一内容是从响应中获取 cookie。我希望你这样做是正确的,因为你使用它们来提出第二个请求。

此代码看起来像您的代码,但带有我如何获取 cookie 的示例。我还添加了引用标题。它成功地为我下载了该文件,并且 utorrent 正确识别了它:

    // logging in
    System.out.println("logging in...");
    Response res = Jsoup.connect("https://ww2.yggtorrent.is/user/login")
            .timeout(10000)
            .data("id", "<MyLogin>", "pass", "<MyPassword>")
            .method(Method.POST)
            .execute();

    // getting cookies from response
    Map<String, String> cookies = res.cookies();
    System.out.println("got cookies: " + cookies);

    // optional verification if logged in
    System.out.println(Jsoup.connect("https://ww2.yggtorrent.is").cookies(cookies).get()
            .select("#panel-btn").first().text());

    // connecting with cookies, it may be useful to provide referer as some servers expect it
    Response resultImageResponse = Jsoup.connect("https://ww2.yggtorrent.is/engine/download_torrent?id=285633")
            .referrer("https://ww2.yggtorrent.is/engine/download_torrent?id=285633")
            .cookies(cookies)
            .ignoreContentType(true)
            .execute();

    // saving file
    FileOutputStream out = (new FileOutputStream(new java.io.File("C:/toto.torrent")));
    out.write(resultImageResponse.bodyAsBytes());
    out.close();
    System.out.println("done");

【讨论】:

非常感谢!它现在完美运行!再次感谢!

以上是关于Java Jsoup 下载 torrent 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 python-libtorrent 从 torrent 文件中获取 torrent 下载目录

Jsoup错误java.lang.NoClassDefFoundError: org.jsoup.Jsoup

为啥 torrent 不能通过 HTTP 下载某些文件?

如何在 python 中使用 urllib 下载 .torrent 文件?

检查从 torrent 下载的视频文件是不是可以播放

通过php下载.torrent文件,Invalid Bencoding