关于 H-Downloader
H-Downloader
是我于2020年2月写的本子下载器(一年半过去了),整理代码时修了点bug并开源。其可以下载如下网站的本子:
- e-hentai.org
- ja.erocool.com
当时虽然也是拿IDEA
整的,但是很多地方都有带改进。比方说:依赖是下载的jar
手动引用的,以及种种,以至于今天,哦不对,是昨天(笑),打开项目的时候都是红叉。下面是这次做的改进:
- 使用
maven
来管理依赖 erocool
用了Cloudflare
做cdn
,所以对于并发比较敏感。在H_Downloader.java
当中有一个MAX_CONCURRENT_THREAD
的常量可以配置下载的并发线程数
测试
但是在测试的过程当中仍然发现了问题,比如:
- 未处理
e-hentai
超过40页,即要翻页(有多个简介页)的情况,看心情写。 - 国内
erocool
的主站被墙,cdn
可能没有被墙。在analyze
和download
之间记得开关代理。
主要讲讲我的启动方案吧,感觉这个是很头大的一件事,因为我的Shadowsocks
不是全局的,而是开了一个本地的代理服务器,而我也懒得在项目中增加proxy_server
的设置了。基于以上种种,我首先尝试使用Windows
的proxychains
跑,但是出了一些奇怪的问题:
经过一番搜索后无果,包括尝试过加上-Djava.net.preferIPv4Stack=true
或者写System.setProperty("proxyHost", "localhost")
等操作,也将proxychains
的host
修改为[::1]
, 127.0.0.1
, localhost
过。
于是乎我决定在在WSL
中跑GUI
(这一定是一个危险的决定), 并且还要用proxychains
(这听起来更加危险了)
过程
安装jdk
首先安装java
环境。由于Windows
上一不小心拿了jdk 16
进行编译(最主要是不想装其他环境了),所以我们就勉为其难地在Ubuntu
上也装一个吧:
# 添加PPA
sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
# 安装jdk
sudo apt install oracle-java16-installer
如果要卸载:
sudo add-apt-repository --remove ppa:linuxuprising/java
sudo apt-get remove oracle-java16-installer
然后我们测试一下:
$ javac --version
javac 16.0.2
看来确实有成功装上。jdk
一般装在这里:
/usr/lib/jvm/<jdk-name>
配置IDEA
启动
然后就是要求输入jdk
的version
和path
,根据上面说的来就行了。
尝试启动【前提:配置好X Server,之前的文章有写】
先在Windows
上Build
一下,然后Run
。我们非常惊喜地发现,报错了:
/usr/lib/jvm/java-16-oracle/bin/java -Dfile.encoding=UTF-8 -classpath /mnt/c/Users/JeffersonQin/Desktop/H-Downloader/target/classes:/mnt/c/Users/JeffersonQin/.m2/repository/org/jsoup/jsoup/1.14.1/jsoup-1.14.1.jar:/mnt/c/Users/JeffersonQin/.m2/repository/com/itextpdf/itextpdf/5.5.13.2/itextpdf-5.5.13.2.jar edu.sfls.Jeff.JavaDev.HDownloader.App.Main
Exception in thread "main" java.awt.HeadlessException:
No X11 DISPLAY variable was set,
but this program performed an operation which requires it.
at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:165)
at java.desktop/java.awt.Window.<init>(Window.java:549)
at java.desktop/java.awt.Frame.<init>(Frame.java:426)
at java.desktop/javax.swing.JFrame.<init>(JFrame.java:224)
at edu.sfls.Jeff.JavaDev.HDownloader.Interface.H_Downloader.<init>(H_Downloader.java:22)
at edu.sfls.Jeff.JavaDev.HDownloader.App.Main.main(Main.java:9)
Process finished with exit code 1
它说No X11 DISPLAY variable was set
,这显然和事实不符。没有关系,经过万能的stackoverflow
搜索,我们只需要在启动GUI
前加入这行代码:
System.setProperty("java.awt.headless", "false");
再次启动,发现还是不行:
看到这个报错,候我们又会感到非常困惑:我们的$DISPLAY
变量明明不是:0
(注意:这里不行是因为WSL2必须要局域网地址),但这里却显示是:0
,肯定启动不了。
经过一番尝试,设置了/etc/profile
, ~/.profile
, ~/.bashrc
等多个配置文件,还是不行,于是我放弃了这条道路,转而直接进行暴力美学:使用命令行要个屁的IDE。由于每次执行的时候IDEA
都会直接显示出运行命令,这无疑方便了很多。就像这样:
/usr/lib/jvm/java-16-oracle/bin/java -Dfile.encoding=UTF-8 -classpath /mnt/c/Users/JeffersonQin/Desktop/H-Downloader/target/classes:/mnt/c/Users/JeffersonQin/.m2/repository/org/jsoup/jsoup/1.14.1/jsoup-1.14.1.jar:/mnt/c/Users/JeffersonQin/.m2/repository/com/itextpdf/itextpdf/5.5.13.2/itextpdf-5.5.13.2.jar edu.sfls.Jeff.JavaDev.HDownloader.App.Main
好耶,成功跑起来了:
但是我清楚地意识到,现在屁都干不了,因为没开梯子。我尝试前缀加个proxychains
后点了analyze
,他很争气地出了结果,但是,中文日文是乱码。
解决中文日文乱码问题
安装字体:
sudo apt-get install fonts-wqy-microhei fonts-wqy-zenhei xfonts-wqy
安装完显示便正常了。
尝试下载
经过不懈地努力测试,我得出了「国内erocool
的主站被墙,cdn
可能没有被墙。在analyze
和download
之间记得开关代理。」的结论。
方法:我们只需要在下图两个红框框出来的地方反复横跳即可。
结果图
总结与展望
搞了这么多,真的不由得感慨,当初的自己竟然有胆量写GUI
?我当初竟然能想出int[1]
这样的数组当作指针在Java里传参???我当初竟然能在OS X
下面开全局梯子一个错没遇到????现在想想,满满的都是回忆。当初还以这个作为工具,写了扩展接口,当成是erocool
爬虫的可视化下载界面。那个设计当初竟然只花了五分钟写完,让人不由得看开静态语言和IDE
的伟大。现在都磨练到可以手写python
无提示了。