cd ~{,/zhs/}
V2Ray 核心并不提供订阅功能,问题不大,对于单节点或几个节点的自建用户来说基本没什么用。但如果是机场用户,就需要找一个支持订阅的客户端才能有更好的用户体验。
目前为止,存在好几种订阅格式;我会按自己的需求,探索如何使用 Python 或者其他语言来解析其中几种。
Base64
编码;vmess
、ss
、socks
。示例:
vmess://base64(Configuration)
ss://base64(Configuration)
socks://base64(Configuration)
HOWTO Fetch Internet Resources Using The urllib Package — Python 3.8.0 documentation
from urllib.request import urlopen
subscribe_url = 'https://input-your-own-v2rayn-format-subscribe-url-here'
return_content = urlopen(subscribe_url).read()
print(return_content)
应该得到一个极其长、看似随机的字符串,像下面这样:
base64 — Base16, Base32, Base64, Base85 Data Encodings — Python 3.8.0 documentation
from base64 import b64decode
share_links = b64decode(return_content).decode('utf-8').splitlines()
print(share_links)
这一步我们得到一个字符串列表,一堆分享链接:
from urllib.parse import urlsplit
import json
schemes_allow = ['vmess', 'ss', 'socks']
configs = []
for share_link in share_links:
url = urlsplit(share_link)
if url.scheme not in schemes_allow: raise RuntimeError('invalid share link')
configs.append(json.loads(b64decode(url.netloc).decode('utf-8')))
print(configs)
注意:
url.netloc
可能需要填充(padding)。
最后,我们得到一个 json 对象列表,其中每一个都包含一个节点配置: