ge.tt文件分享服务CLI及API的问题
关于 ge.tt
最近我一直在寻找支持直链形式的文件分享服务:
- 支持通过 cURL 或者公开 API 上传文件生成分享地址;
- 用户可以通过 wget、cURL 等程序直接下载文件;
- 上传者后续可以更新文件并保持分享地址不变;
- 国内的普通用户可以正常访问下载分享的文件。
如果使用 Dropbox、Google Drive 应该也可以实现前面几个需求,但这两个网盘的最大问题在于国内难以描述的墙,而且上传下载还是稍微有点复杂。
以前我使用过 DriveHQ 服务,免费用户支持通过 FTP 方式上传文件(付费用户还支持通过 WebDAV 上传),上传到 Web 分享目录的文件可以直接通过 HTTP 下载,这样也算能达到我的要求了,只是自动处理 FTP 上传覆盖要稍微麻烦点。
目前我使用的是 ge.tt 文件分享服务,相对 DriveHQ 来说其优势在于 ge.tt 开放了 API,而且也有第三方写的 Python / Perl / Java 等各种形式的文件管理工具。虽然 ge.tt 免费帐户只有 2GB 的存储空间,但仍然已经有 500 多万的用户分享了近 5000 万份文件,拿来分享一些小文件或者程序也是很方便的了。
ge.tt 提供了 REST 和 Live API,重点可以关注其 REST API(不过 ge.tt 官网的 API 说明文档暂时无法访问):
http://ge.tt/developers/overview
ge.tt 推荐在客户端上使用 gett-cli 工具来管理文件和分享,同样可以参考其官网说明:
gett-cli 的问题
gett-cli 工具基于 Python 3 实现,其 Bitbucket 项目主页为:
https://bitbucket.org/mickael9/gett-cli/overview
查看项目说明显示该工具看起来也很简单,安装之后通过 gett
命令就可以管理了。gett
命令默认提供了上传文件、列表分享、删除分享、删除分享中的文件(一个分享地址支持包含多个文件)、搜索分享或文件的功能。
只是 gett-cli 在一开始登录的时候就碰到了问题,输入用户和密码之后直接登录失败:
(trusty)zzm@localhost:~/Downloads$ gett Please enter your Ge.tt email: xxx@gmail.com Please enter your Ge.tt password: Traceback (most recent call last): File "/usr/local/bin/gett", line 11, in <module> load_entry_point('gett-cli==0.2.3', 'console_scripts', 'gett')() File "/usr/local/lib/python3.4/dist-packages/gett_cli-0.2.3-py3.4.egg/gett/uploader.py", line 96, in entry_point File "/usr/local/lib/python3.4/dist-packages/gett_cli-0.2.3-py3.4.egg/gett/uploader.py", line 198, in main File "/usr/local/lib/python3.4/dist-packages/gett_cli-0.2.3-py3.4.egg/gett/gett.py", line 122, in login_auth File "/usr/local/lib/python3.4/dist-packages/gett_cli-0.2.3-py3.4.egg/gett/gett.py", line 103, in _load KeyError: 'accesstoken'
我在参考 ge.tt 的 REST API 说明之后使用 cURL 模拟登录请求,ge.tt 服务器也会返回 Wrong credentials
错误:
(trusty)zzm@localhost:~/Downloads$ curl -i -X POST --data '{"email":"xxx@gmail.com","password":"test-pass"}' http:// open.ge.tt/1/users/login HTTP/1.1 403 Forbidden Content-Type: application/json; charset=utf-8 Date: Wed, 05 Apr 2017 18:11:11 GMT ETag: W/"71-xxx+xxx" set-cookie: sails.sid=s%3Axxx-xxx%2FkOnG%2Bxxx%2Bxxx; Path=/; HttpOnly Vary: X-HTTP-Method-Override, Accept-Encoding X-Powered-By: Sails <sailsjs.org> Content-Length: 113 Connection: keep-alive {"message":"Wrong credentials","body":{"err":"Missing credentials"},"login":0,"reason":{"error":"access denied"}}
经过调试我才发现 ge.tt 的 REST API 请求中必须增加 Content-Type: application/json;charset=UTF-8
头才能正常返回数据。
修改 gett-cli 工具 Python 代码之后,现在 gett
命令可以正常返回用户使用的空间了:
(trusty)zzm@localhost:~/Downloads$ gett Please enter your Ge.tt email: xxx@gmail.com Please enter your Ge.tt password: Do you wish to store the session token? (y/n): y Storage used: 232.81 KB out of 2.00 GB (0.0%)
登录成功之后 gett-cli 工具默认会将 Refresh Token 保存在用户主目录的 .gett-token
文件中:
root@ee9055d6b11f:~# cat .gett-token r.0.user-25YKSbxxxxxxx-..xxxxxxx
这样后面再使用 gett-cli 工具就不用重复输入用户名和密码登录了。
修改 gett-cli
另外我还发现 gett-cli 工具存在由于缺少文件大小参数导致上传的文件不正确等问题,为此我专门修改了 gett-cli 代码以解决登录和上传的问题。由于生成的 gett-cli.patch
补丁文件内容有点长这里就不贴出来了,有需要的话可以从下面的 Pastebin 地址下载:
http://pastebin.com/raw/0siCtqkW
有动手能力的朋友们可以自行检出 Bitbucket 上的 gett-cli 版本库进行修改编译安装。
如果嫌编译麻烦也可以直接修改替换已经安装好的 gett-cli 工具 egg 文件,以我使用的 Ubuntu 系统上的 Python 3.4 为例,大概步骤如下(中间直接使用 patch
命令打补丁):
(trusty)zzm@localhost:~/Downloads$ cp /usr/local/lib/python3.4/dist-packages/gett_cli-0.2.3-py3.4.egg . (trusty)zzm@localhost:~/Downloads$ sudo unzip gett_cli-0.2.3-py3.4.egg && rm -f gett_cli-0.2.3-py3.4.egg Archive: gett_cli-0.2.3-py3.4.egg inflating: EGG-INFO/zip-safe inflating: EGG-INFO/top_level.txt inflating: EGG-INFO/entry_points.txt inflating: EGG-INFO/dependency_links.txt inflating: EGG-INFO/SOURCES.txt inflating: EGG-INFO/PKG-INFO inflating: gett/uploader.py inflating: gett/gett.py inflating: gett/__init__.py inflating: gett/__pycache__/uploader.cpython-34.pyc inflating: gett/__pycache__/gett.cpython-34.pyc inflating: gett/__pycache__/__init__.cpython-34.pyc (trusty)zzm@localhost:~/Downloads$ sudo patch -p2 < gett-cli.patch (trusty)zzm@localhost:~/Downloads$ sudo py3compile gett/gett.py gett/uploader.py (trusty)zzm@localhost:~/Downloads$ sudo zip -r gett_cli-0.2.3-py3.4.egg EGG-INFO gett adding: EGG-INFO/ (stored 0%) adding: EGG-INFO/PKG-INFO (deflated 26%) adding: EGG-INFO/entry_points.txt (deflated 2%) adding: EGG-INFO/top_level.txt (stored 0%) adding: EGG-INFO/SOURCES.txt (deflated 48%) adding: EGG-INFO/dependency_links.txt (stored 0%) adding: EGG-INFO/zip-safe (stored 0%) adding: gett/ (stored 0%) adding: gett/uploader.py (deflated 68%) adding: gett/__pycache__/ (stored 0%) adding: gett/__pycache__/__init__.cpython-34.pyc (deflated 21%) adding: gett/__pycache__/gett.cpython-34.pyc (deflated 57%) adding: gett/__pycache__/uploader.cpython-34.pyc (deflated 48%) adding: gett/__init__.py (stored 0%) adding: gett/gett.py (deflated 71%) (trusty)zzm@localhost:~/Downloads$ sudo mv gett_cli-0.2.3-py3.4.egg /usr/local/lib/python3.4/dist-packages/gett_cli-0.2.3-py3.4.egg
当然如果你不想在系统中安装 gett-cli 也可以直接下载使用我修改好的 gett 工具,解压缩之后运行其中的 uploader.py
程序即可(需要 Python 3 环境):
https://zohead.com/downloads/gett-cli-0.2.3.tar.gz
使用 gett-cli 工具
登录之后使用 gett-cli 工具上传文件非常简单,默认上传文件时都是创建新的分享,上传多个文件则直接附加多个文件参数:
(trusty)zzm@localhost:~/Downloads$ gett gett-cli-0.2.3.tar.gz Creating file(s)... -------------------------------------------------------------------------------- Share: Untitled (1 file(s)) [http://ge.tt/8D95lij2] -------------------------------------------------------------------------------- - gett-cli-0.2.3.tar.gz 6.54 KB http://ge.tt/8D95lij2/v/0 remote gett-cli-0.2.3.tar.gz ( 1/1) [########################################] 100 % Storage used: 194.00 B out of 2.00 GB (0.0%)
上面结果中的 http://ge.tt/8D95lij2
就是新创建的文件分享地址,http://ge.tt/8D95lij2/v/0
则是该分享中某个文件的地址(0
是分享下的文件 ID,如果上传多个文件就会有 v/1
、v/2
之类的文件地址)。
如果需要删除创建的分享可以运行:
(trusty)zzm@localhost:~/Downloads$ gett --delete http://ge.tt/8D95lij2 Deleted share: Untitled [http://ge.tt/8D95lij2] Storage used: 6.74 KB out of 2.00 GB (0.0%)
用户如果需要下载分享中的文件那就更方便了,不需要 gett-cli 工具,直接一条 cURL 命令下载即可(替换命令中的分享地址和文件 ID):
(trusty)zzm@localhost:~/Downloads$ curl -k -o gett-cli-0.2.3.tar.gz -L -e "http://ge.tt/8D95lij2" "http://api.ge.tt/1/files/8D95lij2/0/blob?download"
后记
ge.tt 文件分享服务还存在一些小问题,比如某个分享中已经上传的文件目前还无法直接以相同的文件 ID 进行覆盖替换(例如上面例子中的 http://ge.tt/8D95lij2/v/0
),只能删除文件再上传新文件到该分享,新上传的文件的 ID 只能递增,不能保持原来的文件 ID(例如删除之后新上传的文件 ID 可能是 http://ge.tt/8D95lij2/v/3
)。
结合这段时间我的使用感觉来看,ge.tt 用于分享小文件还算比较方便的,很适合一些需要通过工具或命令自动上传下载文件的场合。最后如果文章中有任何问题,还请提出指正,祝大家玩的开心。
依云:
2017年04月18日 星期二 02:43下午
好麻烦。我喜欢 https://transfer.sh/ API 简单易用,只是没有管理功能。
依云:
2017年04月18日 星期二 02:44下午
ge.tt 竟然不支持 HTTPS……不符合国情啊。
Uranus Zhou:
2017年04月18日 星期二 06:33下午
transfer.sh 也收藏过,直接上传分享文件的话确实很方便呢。
就是不能管理,没法修改替换文件,也只能存14天。
Uranus Zhou:
2017年04月18日 星期二 06:34下午
ge.tt API 其实支持 HTTPS,但网站却不支持,不知道开发人员肿么想的 >o<
netawater:
2017年10月21日 星期六 09:35下午
get.tt被ublock报恶意网站,普通人能访问?
Uranus Zhou:
2017年10月21日 星期六 09:49下午
我这好像没报的,ge.tt 主要方便通过 curl 之类的命令直接下载文件。
Yuting Zhang:
2018年04月18日 星期三 02:20上午
gett-cli的下载链接( https://zohead.com/downloads/gett-cli-0.2.3.tar.gz ) 已经失效了。
Uranus Zhou:
2018年04月19日 星期四 01:10上午
不好意思,VPS 服务器更换之后有些文件丢失了,gett-cli 已经重新上传咯。