我正在使用来自
的torrent文件(ubuntu-14.04.1-desktop-amd64.iso)http://torrent.ubuntu.com:6969/
我计算了它的信息哈希,它与网站上的哈希匹配。但是当我试图发送GET请求时:
我得到:
d14:failure reason63:Requested download is not authorized for use with this tracker.e
我不明白我做错了什么
我以这种方式生成请求:
HttpURLConnection connection;
final String INFO_HASH = "info_hash";
final String PEER_ID = "peer_id";
final String PORT = "port";
final String EVENT = "event";
try {
byte[] peerId = new byte[20];
Random rnd = new Random();
rnd.nextBytes(peerId);
URI uri = new URIBuilder(metaInfo.getAnnounce())
.addParameter(INFO_HASH, new String(metaInfo.getInfoHash(), "UTF-8"))
.addParameter(PEER_ID, new String(peerId, "UTF-8"))
.addParameter(PORT, "6881")
.addParameter(EVENT, "started").build();
log.info("Sending request to: " + uri.toURL().toString());
connection = (HttpURLConnection) uri.toURL().openConnection();
} catch (MalformedURLException e) {
throw new RuntimeException("Invalid torrent file: illegal announce in torrent file");
} catch (URISyntaxException e) {
throw new RuntimeException("Couldn't build URI: illegal announce in torrent file");
}
答案 0 :(得分:2)
我明白了。您需要在ISO-8859-1中编写info_hash并始终指定其他字段(已上载,下载,左侧)。此外torrent.ubuntu.com也希望我指定compact和no_peer_id
代码的工作版本:
HttpURLConnection connection;
final String INFO_HASH = "info_hash";
final String PEER_ID = "peer_id";
final String PORT = "port";
final String EVENT = "event";
final String UPLOADED = "uploaded";
final String DOWNLOADED = "downloaded";
final String LEFT = "left";
final String NO_PEER_ID = "no_peer_id";
final String COMPACT = "compact";
try {
byte[] peerId = new byte[20];
Random rnd = new Random();
rnd.nextBytes(peerId);
URI uri = new URIEncodeBuilder(metaInfo.getAnnounce())
.addParameter(INFO_HASH, new String(metaInfo.getInfoHash(), "ISO-8859-1"), "ISO-8859-1")
.addParameter(PEER_ID, "-TO0042-0ab8e8a31019")
.addParameter(PORT, "6881")
.addParameter(EVENT, "started")
.addParameter(UPLOADED, "0")
.addParameter(DOWNLOADED, "0")
.addParameter(LEFT, "1028128768")
.addParameter(COMPACT, "1")
.addParameter(NO_PEER_ID, "0").build();
log.info("Maybe: " + uri.toURL().toString());
connection = (HttpURLConnection) uri.toURL().openConnection();
} catch (MalformedURLException e) {
throw new RuntimeException("Invalid torrent file: illegal announce in torrent file");
} catch (URISyntaxException e) {
throw new RuntimeException("Couldn't build URI: illegal announce in torrent file");
}