wget批量下载gitlab uploads的文件和图片
-
背景
- 下载gitlab的uploads文件,因为wiki可以直接clone,但是上传的文件和图片却无法下载(除非你有gitlab的服务器权限)
- 之前尝试用写Java工具下载
- 遍历所有的.md文件
- 正则表达式搜索"/uploads/[a-z0-9]+/\S+.[a-z]+" 找到上传的文件
- 然后使用http或者调用wget直接下载
-
遇到的问题
- 写工具这种方式相对比较麻烦
- 一个最大的问题是用http或者wget下载会遇到权限的问题,因为如果要访问或者下载需要gitlab的ldap验证,否则无法下载真正的文件
- 浏览器这边直接访问拼接出来的下载url也是先跳转到验证界面,验证通过后才可继续下载
-
解决方案
- 不在自己使用工具,直接使用wget的批量下载功能
- 关于wget的权限验证,可以使用cookies的方式验证(ldap和http验证不同,http的话可以直接指定--http-user选项)
-
测试sample命令
wget指定了参数--header,指定cookie,这样就可以ldap验证成功
--exclude-directories 排除某些目录(不能排除wikis目录,否则uploads也被排除)
TODO 目前测试发现无法直接指定uploads目录,只能指定上层目录,然后通过exclude排除不需要的目录如commit
/usr/local/bin/wget -r -np -nH -R index.html --header="Cookie:sidebar_collapsed=false; remember_user_token=xxx; _gitlab_session=yyy" https://...gitlab/zzz
-
注意的问题
- cookie获取可以直接通过chrome浏览器直接获取或者通过开发者工具copy as curl获取cookie部分
- Runtime.exec() 不等同于直接执行command line命令,exec有很多重载形式
- du -h查看uploads的文件大小,最好在open一下是否打开
-
实战步骤
- git clone wikis
- git remote -v 查看地址
- wget批量下载,指定cookies验证,排除某些目录,下载uploads
-
参考
-
https://superuser.com/questions/1254687/how-do-i-do-ldap-authentication-with-wget
LDAP is not an authentication mechanism – it is merely an account storage backend; it's essentially the same as storing accounts in MySQL or such. Thus, there is no such thing as "LDAP authentication" as far as HTTP clients are concerned.
TODO 也可以尝试curl
-