今天把一个很大的压缩包转存到了我的百度云网盘,但是压缩包里只有少数几个小文件是我所需要的。在寝室下载压缩包不但需要很长时间,而且会把网络带宽占满,影响自己和室友使用网络。于是我打算用freeshell(我们学校LUG社团提供的免费Linux主机)下载这个压缩包,在远程主机上解压文件,然后把需要的文件取回到自己的电脑。
Linux平台上没有百度云客户端。用别人提供的Linux百度云程序不仅需要现学,而且账号的安全性不能很好的保证。于是我决定用curl命令完全模拟自己电脑上网页版百度云的下载请求。
我用的是chrome浏览器。在网页版百度云的页面上按F12打开调试界面,切换到Network选项卡,点击下载文件,可以看到浏览器发出了很多个HTTP请求,其中一个请求是重定向到一个zip文件,如图所示:
在它上面点击右键,选择“Copy as cURL”,浏览器就会把这个请求写成一个Linux的curl命令语句,复制到剪贴板。
然后在Linux终端(通过ssh连接)粘贴这条语句,在命令最后加上“-o file.zip”。这个参数表示让curl程序把数据保存到file.zip这个文件中,而不是直接在终端输出。
由于curl语句中包含了和百度云登录状态有关的cookie字符串,这里就不贴截图了。
下载过程中可以看到下载的进度和速度等数据。学校的网速很快,下载很快就结束了。
我使用unzip命令解压这个文件:unzip file.zip -d ./zipfiles 其中-d参数表示解压到的目录。
之后我遇到了文件名中文乱码的问题,解压出的文件和目录名全是乱码,在网上搜索了很多方法但是都没有解决,我便采用了一种不太方便但是可以临时避开这个问题的方法:
把解压出来的文件临时转移到Apache服务器的目录中,在自己的电脑上访问这个目录,在浏览器中把编码方式改为GB2312,然后下载自己需要的那几个文件,最后把这个目录删除。
文件被取回到了自己的电脑上,经检查文件内容是完整的,可以正常使用。但是解压出的中文文件名乱码的问题我不知道怎么解决,如果你知道解决办法,麻烦在下面回复告诉我,不胜感激。
哈哈 再看现在的百度云 恍如隔世
参见这个项目,实测没有问题
https://github.com/zonyitoo/GBKUnzip
unzip 有个补丁可以通过 -I 和 -O 的选项来指定字符编码,实测有效。Ubuntu 和 Debian-testing 里面的 unzip 已经包含这个补丁。可以搜一下 unzip-iconv。
openSUSE 有人说用 unzip-rcc 可以解决编码问题,实测无效。