在国内快速下载Visual Studio Code

本文介绍了如何通过Python脚本自动从中国的Azure下载Visual Studio Code,以解决国内下载速度慢的问题。脚本能够自动发现并替换下载链接的域名,提高下载速度。同时提供了脚本的使用方法和代码示例。
摘要由CSDN通过智能技术生成

这个文章写得不错,特此整理转载。

原文链接:https://note.qidong.name/2020/05/dl-vscode-cn/

在国内,想要下载Visual Studio Code,有时真是一件不容易的事。 它本体发布于海外,国内暂无可用镜像,更新频率又高。 在某些网络环境下,下载或更新真是苦不堪言,卡着卡着就断掉了。

本文提供一个Python脚本,自动从中国的azure下载。能略快一些。

配置软件源 

对Linux的deb系来说,本以为配置好了源/etc/apt/sources.list.d/vscode.list,就可以简单方便。

deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main

但有时卡住就是卡住,一点办法没有。

替换下载域名 

如果是从官网点击下载,下载位置会略有不同。 多番重定向之后,最终链接是这种形式:

https://az764295.vo.msecnd.net/stable/5763d909d5f12fe19f215cbfdd29a91c0fa9208a/code_1.45.1-1589445302_amd64.deb

然而依然很慢。如果手动替换域名为vscode.cdn.azure.cn,则下载起来会快很多。

wget https://vscode.cdn.azure.cn/stable/5763d909d5f12fe19f215cbfdd29a91c0fa9208a/code_1.45.1-1589445302_amd64.deb

原理推测,大概是vscode.cdn.azure.cn是一个中国区服务器,其上要么有vscode镜像,要么有CDN代理。 从三级域名推测,是CDN代理;从四级域名推测,是镜像。 如果是代理,通过azure内网直通国外,速度自然快很多。

这个方案有个问题,那就是手工操作比较繁琐。 如果执行多次,非常消耗耐心。

自动发现与替换域名 

据调查,当前vscode的各版本,大致如下:

为了实现自动替换,孤写了一个脚本。 原理大概是利用重定向,找到真实下载链接,然后通过替换域名,输出国内链接。 内容如下:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
"""
自动从中国下载vscode。

使用前先预装:

    pip install requests tqdm

使用示例:

    python3 cndlvsc.py deb

查看帮助:

    ./cndlvsc.py --help

更多介绍: https://note.qidong.name/2020/05/dl-vscode-cn/
"""
from argparse import ArgumentParser
from os.path import split
from urllib.parse import urlparse, urlunparse

import requests
from tqdm import tqdm

CN_DOMAIN = 'vscode.cdn.azure.cn'
TYPE2URL = {
    'win32': 'https://update.code.visualstudio.com/latest/win32/stable',
    'win64': 'https://update.code.visualstudio.com/latest/win32-x64/stable',
    'deb': 'https://update.code.visualstudio.com/latest/linux-deb-x64/stable',
    'rpm': 'https://update.code.visualstudio.com/latest/linux-rpm-x64/stable',
    'mac': 'https://update.code.visualstudio.com/latest/darwin/stable',
}


def main():
    args = _parse_args()

    url = TYPE2URL[args.type]
    resp = requests.get(url, allow_redirects=False)
    resp.raise_for_status()
    dl_url, fname = replace_domain(resp.next.url, CN_DOMAIN)

    if args.print_only:
        print(dl_url)
    else:
        download(dl_url, fname)


def _parse_args():
    parser = ArgumentParser()
    parser.add_argument(
        'type',
        choices=TYPE2URL,
        help='The download type',
    )
    parser.add_argument(
        '-p',
        '--print-only',
        action='store_true',
        help='Print url only',
    )
    return parser.parse_args()


def replace_domain(url, domain):
    result = urlparse(url)
    lst = list(result)
    lst[1] = domain
    _, fname = split(result.path)
    return urlunparse(lst), fname


def download(url, fname):
    resp = requests.get(url, stream=True)
    total = int(resp.headers.get('content-length', 0))
    with open(fname, 'wb') as file, tqdm(
            desc=fname,
            total=total,
            unit='iB',
            unit_scale=True,
            unit_divisor=1024,
    ) as bar:
        for data in resp.iter_content(chunk_size=1024):
            size = file.write(data)
            bar.update(size)


if __name__ == '__main__':
    main()

yanqd0 / 国内快速下载vscode / cndlvsc.py

原始数据

复制或下载之后,保存为cndlvsc.py文件,然后用Python3执行:

python3 cndlvsc.py deb

可查看帮助,下载各种版本的vscode。 也可-p打印下载链接,通过浏览器或其它方式下载。

结语 

当一个中国开发者真是好难!

本来想过写一个CLI发布到PyPI中,这样只用pip install cndlvsc,就可以直接使用。 但是考虑到这就是个临时使用的小脚本,还不知道什么时候就会失效,也就算了。

今年国际形式进一步恶化,网络环境也更糟了。 如今想要和国际接轨,代价越来越大,效率越来越低。 如果强行与国际脱轨,中国的软件行业无疑会落后于时代。


相关笔记



本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,详见本站版权声明

本站没有任何支持评论功能的计划。 如果你对本站的设计、内容、观点有什么意见,欢迎来信指正。


作者:匿蟒 邮箱:yanqd0@outlook.com 备案:闽ICP备15022549号

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值