关于 H-Downloader

H-Downloader是我于2020年2月写的本子下载器(一年半过去了),整理代码时修了点bug并开源。其可以下载如下网站的本子:

  • e-hentai.org
  • ja.erocool.com

当时虽然也是拿IDEA整的,但是很多地方都有带改进。比方说:依赖是下载的jar手动引用的,以及种种,以至于今天,哦不对,是昨天(笑),打开项目的时候都是红叉。下面是这次做的改进:

  • 使用maven来管理依赖
  • erocool用了Cloudflarecdn,所以对于并发比较敏感。在H_Downloader.java当中有一个MAX_CONCURRENT_THREAD的常量可以配置下载的并发线程数

测试

但是在测试的过程当中仍然发现了问题,比如:

  • 未处理e-hentai超过40页,即要翻页(有多个简介页)的情况,看心情写。
  • 国内erocool的主站被墙,cdn可能没有被墙。在analyzedownload之间记得开关代理。

主要讲讲我的启动方案吧,感觉这个是很头大的一件事,因为我的Shadowsocks不是全局的,而是开了一个本地的代理服务器,而我也懒得在项目中增加proxy_server的设置了。基于以上种种,我首先尝试使用Windowsproxychains跑,但是出了一些奇怪的问题:

经过一番搜索后无果,包括尝试过加上-Djava.net.preferIPv4Stack=true或者写System.setProperty("proxyHost", "localhost")等操作,也将proxychainshost修改为[::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启动

然后就是要求输入jdkversionpath,根据上面说的来就行了。

尝试启动【前提:配置好X Server,之前的文章有写】

先在WindowsBuild一下,然后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可能没有被墙。在analyzedownload之间记得开关代理。」的结论。

方法:我们只需要在下图两个红框框出来的地方反复横跳即可。

结果图

总结与展望

搞了这么多,真的不由得感慨,当初的自己竟然有胆量写GUI?我当初竟然能想出int[1]这样的数组当作指针Java里传参???我当初竟然能在OS X下面开全局梯子一个错没遇到????现在想想,满满的都是回忆。当初还以这个作为工具,写了扩展接口,当成是erocool爬虫的可视化下载界面。那个设计当初竟然只花了五分钟写完,让人不由得看开静态语言和IDE的伟大。现在都磨练到可以手写python无提示了。

Reference

最后修改:2021 年 10 月 17 日 02 : 53 PM
真的不买杯奶茶嘛....qwq