megatools dl 报错 「ssl connect error」

好像已经有很长时间,我没办法使用浏览器来使用 mega 了,一直是转圈。不晓得是什么原因, 所以有一段时间我都是在使用手机端的 mega,但是这样就又多了一个转移到电脑的动作。 今天,我又想简化一下我的生活了,于是就有了今天的故事。

问题

我在 scoop 上看到这么一个工具:

Untitled

就想起了我那多年未解的难题:浏览器版本的 mega 不晓得出了什么问题,我没办法使用了。 所以我需要先用手机 app 下载 mega 资源 ,然后再自己传到电脑上去。 那么,我有没有可能用这个工具来达成在电脑上下载资源呢?

简单查了一下,我觉得这个工具甚至比移动端的 mega app 更符合我的要求, 因为一般我也就是用它下载别人分享的资源,以前是不需要登录的,但是似乎使用移动端就一定要登录了, 看来如果这个工具可以使用,那我也就可以卸载移动端应用了。

根据官方的说明档,其实我这个需求很简单,一个命令就搞定了:

megatools dl "https://mega 链接"

不过事情肯定没有那么简单,不然我也不会在这里唠叨了,我这里执行这个命令时报错了:

ERROR: Download failed for 'https://mega.nz/file/____#____': API call 'g' failed: HTTP POST failed: CURL error: SSL connect error

这个报错的信息也是一个新手劝退点,如果我心情不好估计很可能得出结论:不好用,卸载。 不过今天我有些莫名其妙,curl 怎么就无法建立 ssl 连接了?为此我还专门试了一下 curl:

curl "https://mega.nz/file/____#____"

StatusCode        : 200
StatusDescription : OK
Content           : <!DOCTYPE html>
                    <html xmlns="http://www.w3.org/1999/xhtml">
                    <head>
                    <meta property="og:title" content="xxx.xx MB file on MEGA" />
                    <meta property="og:url" content="https://mega.nz/file/____" />
                    <met...
RawContent        : HTTP/1.1 200 OK
                    Access-Control-Allow-Origin: *
                    Access-Control-Allow-Headers: MEGA-Chrome-Antileak
                    Access-Control-Max-Age: 86400
                    Strict-Transport-Security: max-age=63072000; includeSubDomains; prel...
Forms             : {}
Headers           : {[Access-Control-Allow-Origin, *], [Access-Control-Allow-Headers, MEGA-Chrome-Antileak], [Access-Co
                    ntrol-Max-Age, 86400], [Strict-Transport-Security, max-age=63072000; includeSubDomains; preload]...
                    }
Images            : {}
InputFields       : {}
Links             : {@{innerHTML=; innerText=; outerHTML=<a id="dllink" style="display: none;" href="" download="filena
                    me"></a>; outerText=; tagName=A; id=dllink; style=display: none;; href=; download=filename}}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : xxxx

看上去也没什么异常,也可以正常访问。不过 PowerShell 的 curl 是 Invoke-WebRequest 的别名, 并不是真正的 curl,所以为了严谨我们还是在 msys2 上跑一下真正的 curl:

curl "https://mega.nz/file/____#____"

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta property="og:title" content="xxx.xx MB file on MEGA" />
<meta property="og:url" content="https://mega.nz/file/____" />
...

也没有什么问题,但是报错信息显示的是 curl。那估计这个「curl」 指的是 megatools 内嵌的 curl 了,但是这个问题要怎么解呢?

就在我百思不得其解的时候,我看到了一个参数 —proxy, 与 mega 相关的网络问题无外乎本地 ISP 对访问进行限制,这时我们要通过代理绕过这个限制。 加个参数并不难,我们先试一下,不行了再卸载也不迟:

megatools dl "https://mega 链接" --proxy localhost:7890

很神奇,居然成功了。这我就更理解不了了,因为其实我这个网络的代理是挂在路由器上的, 按道理我不应该需要再设代理才对。目前我只能理解为由于某种原因, megatools 的网络请求绕过了路由器的代理机制。

总结

本文介绍了使用 megatools 下载 mega 资源时出现的 SSL 连接错误, 以及通过添加代理参数解决该问题的过程。作者在使用 megatools 下载资源时遇到了问题, 通过使用代理绕过了 ISP 的限制,最终成功下载了资源。

以上总结为 Notion AI 代写,其实只是为了提醒下后来的自己或其他刚使用 megatools 的朋友, 如果你的 megatools 也无法正常工作,不妨也设个代理试试, 因为 megatools 的内部机制可能会绕过现有的代理配置。