viperadnan-git/transferit-py

GitHub: viperadnan-git/transferit-py

一个纯 Python 的客户端,通过 transfer.it 服务实现无需浏览器与账户的文件加密上传与下载。

Stars: 0 | Forks: 0

transferit

从 Python 或终端上传和下载文件到 transfer.it —— 无需浏览器、无需 MEGA 账户、无需外部 CLI 工具。

PyPI Python License

``` from transferit import Transferit with Transferit() as tx: url = tx.upload("report.pdf").url # → https://transfer.it/t/… ``` - **端到端加密** — AES-128-CTR + CBC-MAC,方案与官方 Web 客户端相同。 - **并发 WebSocket 上传** — 每个文件最多 8 个连接,与 MEGA 的 `ulDefConcurrency` 匹配。 - **流式下载 + 解密** — 通过 `httpx.stream`,内存占用恒定,与文件大小无关。 - **文件夹** — 递归上传,保留双向层级结构。 - **每个表单字段均已连接** — 标题、消息、密码、发件人、过期时间、到期通知、最大下载次数、收件人、定时投递。 - **丰富的 CLI 与库 API** — 同一套四个动词(`upload` / `download` / `info` / `metadata`)在两种界面中通用,并通过 `--json` 全面支持脚本化。 ## 安装 | 使用场景 | 命令 | |---|---| | 仅库 | `pip install transferit-py` | | 库 **+** CLI | `pip install 'transferit-py[cli]'` | 需要 **Python 3.11+**。`uv add transferit-py` / `uv add 'transferit-py[cli]'` 同样适用。 ## CLI | 命令 | 用途 | |---|---| | `transferit upload PATH` | 上传文件或文件夹并打印分享链接 | | `transferit download LINK` | 将传输镜像到本地目录 | | `transferit info LINK` | 元数据面板 + 文件/文件夹树 | | `transferit metadata LINK` | 仅元数据面板 | 每个命令均支持 `--json` 以输出机器可读数据。`LINK` 可以是完整分享 URL 或 12 位标识符。 ``` # 最简单 — 单文件,无选项 transferit upload report.pdf # 文件夹上传,7 天过期 transferit upload ./project -e 7d --sender me@example.com # 完整的“发送文件”模式 transferit upload big.mp4 \ --title "Q1 demo" --message "review please" \ --password hunter2 --sender me@example.com \ --expiry 7d --notify-expiry \ --max-downloads 50 \ -r alice@example.com -r bob@example.com \ --schedule 2026-04-25T09:00 ``` `--expiry` 接受从 `1s` 到 `10y` 的任意时长:`30s`、`5m`、`2h`、`7d`、`1w`、`1y` 或类似组合形式,如 `1y6m3d`。运行 `transferit --help` 查看完整标志列表。 ## 库 整个界面封装在单一类中 —— **`Transferit`**。一个实例拥有一个 HTTP 连接池,并在需要时(写操作)惰性地创建一个匿名临时 MEGA 账户,该账户在所有写操作中重复使用。 ``` from transferit import Transferit with Transferit(default_sender="me@example.com", default_expiry="7d") as tx: result = tx.upload("./q1.pdf", title="Quarterly report") # => UploadResult(xh=…, url=…, title=…, total_bytes=…, file_count=1, folder_count=0) meta = tx.metadata(result.url) # → TransferInfo nodes = tx.info(result.url) # → list[TransferNode] tx.download(result.url, "./dl") # → DownloadResult ``` | 方法 | 返回值 | 需要会话? | |---|---|---| | `tx.upload(path, **opts)` | `UploadResult` | 是(惰性创建) | | `tx.download(link, dir, **opts)` | `DownloadResult` | 否 | | `tx.info(link, password=…)` | `list[TransferNode]` | 否 | | `tx.metadata(link, password=…)` | `TransferInfo` | 否 | **`upload()`** 接受所有网页表单字段作为关键字参数 —— `title`、`message`、`password`、`sender`、`expiry`(秒数或持续时间字符串)、`notify_expiry`、`max_downloads`、`recipients`、`schedule`、`concurrency` 以及三个进度回调(`on_progress`、`on_file_start`、`on_file_done`)。 ### 类型化返回值 `TransferInfo`、`TransferNode`、`UploadResult`、`DownloadResult` 是冻结的数据类。每个对象都提供 `.to_json_dict()` 用于序列化;`TransferNode` 还暴露 `.is_file` / `.is_folder`。原始服务器响应保留在 `.raw` 中作为应急通道。 ``` meta = tx.metadata(url) print(meta.title, meta.total_bytes, meta.password_protected) ``` ### 进度钩子 ``` def on_progress(sent: int, total: int) -> None: print(f"{sent/total:6.1%} {sent:>12,} / {total:,} bytes") tx.upload("./big.mp4", on_progress=on_progress) ``` `tx.download` 提供更丰富的回调:`on_start`、`on_file_start`、`on_file_progress`、`on_file_done`、`on_skip`。 ### 默认值 `Transferit(default_sender=…, default_expiry=…, default_concurrency=…)` —— 未提供每调用参数时将使用这些默认值。 ### 低级访问 高级调用者可直接使用 `MegaAPI` —— 每个 MEGA 命令(`create_ephemeral_session`、`create_transfer`、`fetch_transfer`、`set_transfer_attributes` 等)都是其方法。通过 `Transferit(api=MegaAPI(...))` 注入,可用于测试或固定到备用端点。 ## 工作原理 transfer.it 是构建在 MEGA 的 `bt7` API 集群之上的轻量白标层。每次上传都会启动一个匿名临时 MEGA 账户,创建一个传输容器,通过 WebSocket 以 AES-128-CTR 加密流式传输数据块(带有 CBC-MAC 完整性校验),并经由专有的 `x*` 命令族最终化节点列表。完整协议参考(API 动词、加密方案、WebSocket 帧结构、密码派生)位于 [`docs/REVERSE_ENGINEERING.md`](docs/REVERSE_ENGINEERING.md)。 ## 许可证 MIT —— 参见 [`LICENSE`](LICENSE)。 ## 免责声明 **transferit 是一个独立、社区维护的项目。** 它 不 隶属于、 endorsed by、赞助或与 MEGA Limited、transfer.it 或其任何子公司有关联。所有产品名称、标志和品牌均为其各自所有者财产。 本项目通过重新实现官方 Web 客户端分发给每个访问者的公开 JavaScript 来与 transfer.it 互操作 —— 不使用专有 SDK、不使用私有端点、不规避任何访问控制。协议说明文档在 [`docs/REVERSE_ENGINEERING.md`](docs/REVERSE_ENGINEERING.md) 中提供,**仅供教育和互操作性使用**。 **在使用 transferit 前**,请确保您的使用符合: - [transfer.it 的服务条款](https://transfer.it/terms) - [MEGA 的服务条款](https://mega.io/terms) - 适用于您的任何出口管制、数据保护或本地法律 您独自承担通过此库上传的内容和访问的传输。维护者不对误用、数据丢失、服务中断、账户终止或由此软件产生的任何其他后果承担责任。软件按“原样”提供,不附带任何形式的担保 —— 完整法律文本请参见 [`LICENSE`](LICENSE)。 如果您是权利人并认为此项目侵犯了您的权利,请在采取任何其他行动之前向项目仓库提交问题 —— 大多数问题可以直接解决。
标签:AES-128-CTR, API安全, CBC-MAC, JSON输出, MEGA, pip, PyPI, Python, Python 3.11+, SEO: transfer.it, SEO: transferit-py, transfer.it, uv, WebSocket, 上传, 下载, 依赖分析, 元数据, 功能: download, 功能: info, 功能: metadata, 功能: upload, 动态分析, 客户端, 并发上传, 库API, 开源, 技术栈: Python, 文件传输, 无后门, 无浏览器, 无账户, 无需外部CLI, 流式下载, 流解密, 端到端加密, 纯Python, 网络调试, 脚本化, 自动化, 表单字段, 运行时操纵, 逆向工具, 递归文件夹