acgist / snail Goto Github PK
View Code? Open in Web Editor NEW基于Java、JavaFX开发的下载工具,支持下载协议:BT(BitTorrent、磁力链接、种子文件)、HLS(M3U8)、FTP、HTTP。
Home Page: https://www.acgist.com/snail
License: Apache License 2.0
基于Java、JavaFX开发的下载工具,支持下载协议:BT(BitTorrent、磁力链接、种子文件)、HLS(M3U8)、FTP、HTTP。
Home Page: https://www.acgist.com/snail
License: Apache License 2.0
系统信息:mac pro
mac下载稳定版后,解压是jar包,点击打开。报错“未能启动java JAR 文件 snail.javafx-1.6.0.jar”
点击就会重现
系统日志、错误截图、配置截图
[公告]2.17.0建议交流
提交m3u8下载任务后 自动转换m3u8文件 合成mp4或其他视频文件...
问题建议详细描述
@Configuration
public class SnailConfig {
@Bean
public Snail snail() {
log.warn("SnailConfig.snail()");
return Snail.SnailBuilder.newBuilder()
.enableAllProtocol()
.buildSync();
}
}
public Object doGetM3U8(String url) {
ITaskSession download = null;
try {
download = snail.download(url);
snail.lockDownload();
while (true) {
ITaskSessionStatus.Status status = download.getStatus();
if (Objects.equals(ITaskSessionStatus.Status.COMPLETED, status) | Objects.equals(ITaskSessionStatus.Status.FAIL, status)) {
break;
}
System.out.println("等待下载完成...");
}
snail.unlockDownload();
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
snail.unlockDownload();
}
return null;
}
问题重现步骤
系统日志
错误截图
配置截图
版本v1.7.11
建议交流
升级JDK16预览版本
只下载空的文件,文件列表的文件下载下来都是0kb
final String torrentPath = "";
final Snail snail = Snail.SnailBuilder.newBuilder()
.enableTorrent()
.buildSync();
// 注册文件选择事件
GuiContext.register(new MultifileEventAdapter());
// 解析种子文件
final Torrent torrent = loadTorrent(torrentPath);
// 过滤下载文件
final List list = torrent.getInfo().files().stream()
.filter(TorrentFile::notPaddingFile)
.map(TorrentFile::path)
// .filter(path -> path.endsWith(".mkv"))
.collect(Collectors.toList());
// 设置下载文件
MultifileEventAdapter.files(DescriptionWrapper.newEncoder(list).serialize());
// 添加下载
snail.download(torrentPath);
// 等待下载完成
snail.lockDownload();
mac
使用mac 开发springboot 接入好,写好测试demo,直接运行程序报错,
使用demo如下:
TorrentInitializer.newInstance().sync(); ProtocolContext.getInstance().register(MagnetProtocol.getInstance()).available(true); final var taskSession = MagnetProtocol.getInstance().buildTaskSession(url); final var downloader = taskSession.buildDownloader(); downloader.run();
大致报错如下:
`2022-04-18 22:19:52.386 INFO 13376 --- [ restartedMain] c.smart.mall.socket.server.NettyServer : 启动 Netty Socket Server,0.0.0.0/0.0.0.0:9000
2022-04-18 22:19:52.636 WARN 13376 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2022-04-18 22:19:52.764 INFO 13376 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2022-04-18 22:19:52.793 INFO 13376 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8090 (http) with context path ''
2022-04-18 22:19:52.807 INFO 13376 --- [ restartedMain] com.smart.mall.MallApplication : Started MallApplication in 5.02 seconds (JVM running for 10.787)
2022-04-18 22:20:27.922 INFO 13376 --- [0.1-8090-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-04-18 22:20:27.922 INFO 13376 --- [0.1-8090-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2022-04-18 22:20:27.923 INFO 13376 --- [0.1-8090-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
2022-04-18 22:20:27.947 INFO 13376 --- [0.1-8090-exec-2] com.smart.mall.interceptor.AppFilter : params:{}
2022-04-18 22:20:27.966 INFO 13376 --- [0.1-8090-exec-2] c.acgist.snail.context.ProtocolContext : 注册下载协议:FTP
2022-04-18 22:20:27.966 INFO 13376 --- [0.1-8090-exec-2] c.acgist.snail.context.ProtocolContext : 注册下载协议:HLS
2022-04-18 22:20:27.966 INFO 13376 --- [0.1-8090-exec-2] c.acgist.snail.context.ProtocolContext : 注册下载协议:HTTP
2022-04-18 22:20:27.973 INFO 13376 --- [0.1-8090-exec-2] c.acgist.snail.context.ProtocolContext : 注册下载协议:磁力链接
2022-04-18 22:20:27.974 INFO 13376 --- [0.1-8090-exec-2] c.acgist.snail.context.ProtocolContext : 注册下载协议:迅雷链接
2022-04-18 22:20:27.975 INFO 13376 --- [0.1-8090-exec-2] c.acgist.snail.context.ProtocolContext : 注册下载协议:BitTorrent
2022-04-18 22:20:33.141 WARN 13376 --- [0.1-8090-exec-2] com.acgist.snail.context.UpnpContext : UPNP端口映射失败:多重路由环境
2022-04-18 22:20:35.580 WARN 13376 --- [0.1-8090-exec-2] com.acgist.snail.context.GuiContext : 未知GUI事件:REFRESH_TASK_STATUS
2022-04-18 22:20:36.665 ERROR 13376 --- [il-Thread-BT-01] com.acgist.snail.net.TcpClient : TCP客户端连接异常:223.88.58.194-15000
java.util.concurrent.ExecutionException: java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.PendingFuture.get(PendingFuture.java:200) ~[na:na]
at com.acgist.snail.net.TcpClient.connect(TcpClient.java:89) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerClient.connect(PeerClient.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.connect(PeerDownloader.java:77) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.handshake(PeerDownloader.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.buildPeerDownloader(PeerDownloaderGroup.java:182) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.lambda$buildPeerDownloaders$1(PeerDownloaderGroup.java:151) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.checkConnect(Native Method) ~[na:na]
at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishConnect(UnixAsynchronousSocketChannelImpl.java:256) ~[na:na]
at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:202) ~[na:na]
at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:217) ~[na:na]
at java.base/sun.nio.ch.KQueuePort$EventHandlerTask.run(KQueuePort.java:312) ~[na:na]
... 1 common frames omitted
2022-04-18 22:20:39.221 WARN 13376 --- [Thread-Timer-01] com.acgist.snail.context.UpnpContext : UPNP端口映射失败:多重路由环境
2022-04-18 22:20:41.083 ERROR 13376 --- [ead-BT-Timer-01] c.a.snail.pojo.session.TrackerSession : 查找Peer异常,失败次数:1,声明地址:udp://tracker.moeking.me:6969/announce
com.acgist.snail.context.exception.NetException: UDP Tracker声明失败(connectionId)
at com.acgist.snail.net.torrent.tracker.UdpTrackerSession.started(UdpTrackerSession.java:104) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.pojo.session.TrackerSession.findPeers(TrackerSession.java:100) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.tracker.TrackerLauncher.findPeer(TrackerLauncher.java:96) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
at com.acgist.snail.net.torrent.tracker.TrackerLauncherGroup.findPeer(TrackerLauncherGroup.java:102) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:305) ~[na:na]
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java) ~[na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
2022-04-18 22:20:41.620 ERROR 13376 --- [il-Thread-BT-01] com.acgist.snail.net.TcpClient : TCP客户端连接异常:218.242.122.76-15001
java.util.concurrent.TimeoutException: null
at java.base/sun.nio.ch.PendingFuture.get(PendingFuture.java:195) ~[na:na]
at com.acgist.snail.net.TcpClient.connect(TcpClient.java:89) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerClient.connect(PeerClient.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.connect(PeerDownloader.java:77) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.handshake(PeerDownloader.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.buildPeerDownloader(PeerDownloaderGroup.java:182) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.lambda$buildPeerDownloaders$1(PeerDownloaderGroup.java:151) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
2022-04-18 22:20:41.620 ERROR 13376 --- [il-Thread-BT-01] com.acgist.snail.net.TcpClient : TCP客户端连接异常:220.171.158.187-12345
java.util.concurrent.TimeoutException: null
at java.base/sun.nio.ch.PendingFuture.get(PendingFuture.java:195) ~[na:na]
at com.acgist.snail.net.TcpClient.connect(TcpClient.java:89) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerClient.connect(PeerClient.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.connect(PeerDownloader.java:77) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.handshake(PeerDownloader.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.buildPeerDownloader(PeerDownloaderGroup.java:182) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.lambda$buildPeerDownloaders$1(PeerDownloaderGroup.java:151) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
2022-04-18 22:20:45.267 WARN 13376 --- [Thread-Timer-01] com.acgist.snail.context.UpnpContext : UPNP端口映射失败:多重路由环境
2022-04-18 22:20:46.085 ERROR 13376 --- [ead-BT-Timer-01] c.a.snail.pojo.session.TrackerSession : 查找Peer异常,失败次数:1,声明地址:udp://tracker.coppersurfer.tk:6969/announce
com.acgist.snail.context.exception.NetException: UDP Tracker声明失败(connectionId)
at com.acgist.snail.net.torrent.tracker.UdpTrackerSession.started(UdpTrackerSession.java:104) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.pojo.session.TrackerSession.findPeers(TrackerSession.java:100) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.tracker.TrackerLauncher.findPeer(TrackerLauncher.java:96) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
at com.acgist.snail.net.torrent.tracker.TrackerLauncherGroup.findPeer(TrackerLauncherGroup.java:102) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:305) ~[na:na]
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java) ~[na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
2022-04-18 22:20:46.666 ERROR 13376 --- [il-Thread-BT-01] com.acgist.snail.net.TcpClient : TCP客户端连接异常:113.195.210.146-15001
java.util.concurrent.ExecutionException: java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.PendingFuture.get(PendingFuture.java:200) ~[na:na]
at com.acgist.snail.net.TcpClient.connect(TcpClient.java:89) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerClient.connect(PeerClient.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.connect(PeerDownloader.java:77) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.handshake(PeerDownloader.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.buildPeerDownloader(PeerDownloaderGroup.java:182) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.lambda$buildPeerDownloaders$1(PeerDownloaderGroup.java:151) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.checkConnect(Native Method) ~[na:na]
at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishConnect(UnixAsynchronousSocketChannelImpl.java:256) ~[na:na]
at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:202) ~[na:na]
at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:217) ~[na:na]
at java.base/sun.nio.ch.KQueuePort$EventHandlerTask.run(KQueuePort.java:312) ~[na:na]
... 1 common frames omitted
2022-04-18 22:20:46.694 ERROR 13376 --- [il-Thread-BT-01] com.acgist.snail.net.TcpClient : TCP客户端连接异常:183.29.153.6-12345
java.util.concurrent.TimeoutException: null
at java.base/sun.nio.ch.PendingFuture.get(PendingFuture.java:195) ~[na:na]
at com.acgist.snail.net.TcpClient.connect(TcpClient.java:89) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerClient.connect(PeerClient.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.connect(PeerDownloader.java:77) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloader.handshake(PeerDownloader.java:47) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.buildPeerDownloader(PeerDownloaderGroup.java:182) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.peer.PeerDownloaderGroup.lambda$buildPeerDownloaders$1(PeerDownloaderGroup.java:151) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
2022-04-18 22:20:51.089 ERROR 13376 --- [ead-BT-Timer-01] c.a.snail.pojo.session.TrackerSession : 查找Peer异常,失败次数:1,声明地址:udp://retracker.lanta-net.ru:2710/announce
com.acgist.snail.context.exception.NetException: UDP Tracker声明失败(connectionId)
at com.acgist.snail.net.torrent.tracker.UdpTrackerSession.started(UdpTrackerSession.java:104) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.pojo.session.TrackerSession.findPeers(TrackerSession.java:100) ~[snail-1.17.1.jar:1.17.1]
at com.acgist.snail.net.torrent.tracker.TrackerLauncher.findPeer(TrackerLauncher.java:96) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
at com.acgist.snail.net.torrent.tracker.TrackerLauncherGroup.findPeer(TrackerLauncherGroup.java:102) ~[snail-1.17.1.jar:1.17.1]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:305) ~[na:na]
at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java) ~[na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
2022-04-18 22:20:51.328 WARN 13376 --- [Thread-Timer-01] com.acgist.snail.context.UpnpContext : UPNP端口映射失败:多重路由环境
2022-04-18 22:20:51.642 ERROR 13376 --- [il-Thread-BT-01] com.acgist.snail.net.TcpClient : TCP客户端连接异常:61.149.223.187-51413`
You have a good library. But why do you write it when there is already another library in c++ that contains all the functionality?
I figured out how to program it in c++. It's very easy there. You can do whatever you need. You don't need to make one more library.
Perhaps you didn't know about it?
If you have difficulties with programming or using the library, you may ask me questions where you feel comfortable.
Chat room for communication: https://t.me/libtorrent_ru
不打算提供个jdk8版本可以用的嘛
建议交流
JDK17下载地址:http://jdk.java.net/17/
系统信息(名称、版本)、软件信息(版本)
MagnetBuilder 第93行 的 this.url变量已经将%20转换成空格了,导致URI.create()异常。
问题建议详细描述
我简单的在create之前先将空格替换回%20就行了。
问题重现步骤
系统日志、错误截图、配置截图
我也在开发BT相关的下载器,地址:https://github.com/monkeyWie/gopeed
系统信息(名称、版本)、软件信息(版本)
问题建议详细描述
问题重现步骤
系统日志、错误截图、配置截图
I studied the library.
[公告]1.17.1建议交流
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.