白嫖V2Board试用流量

本文最后更新于 2025年4月5日 上午

1. 前言

如果你不想自己搭建机场,又不愿花钱购买,也许你会发现一些 V2Board 机场提供试用流量。这篇文章展示了如何通过 Python 客户端快速实现用户注册、登录和订阅链接的获取操作。这虽方便用户,但机场主们估计会哭笑不得。


2. 主要代码

import requests
import random
import string
import logging

# 设置日志格式和级别
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# 定义 API 服务的基础域名
BASE_URL = "www.laoniu63.top"

class APIClient:
    def __init__(self, email=None, password=None):
        """初始化 API 客户端"""
        self.base_url = f"https://{BASE_URL}/api/v1"
        self.token = None
        self.email = email
        self.password = password

    def make_request(self, method, endpoint, data=None, headers=None):
        """执行 HTTP 请求,并处理错误"""
        url = f"{self.base_url}{endpoint}"
        try:
            response = requests.request(method, url, data=data, headers=headers, timeout=10)
            response.raise_for_status()  # 若响应出错,抛出异常
            return response.json()
        except requests.Timeout:
            logging.error("请求超时,请检查网络连接。")
        except requests.ConnectionError:
            logging.error("无法连接服务器,请稍后重试。")
        except requests.exceptions.HTTPError as e:
            error_msg = e.response.json().get("message", "未知错误")
            logging.error(f"HTTP 错误:{error_msg}")
        except Exception as e:
            logging.error(f"未知错误:{e}")
        return None

    def register_user(self):
        """注册用户"""
        data = {"email": self.email, "password": self.password}
        result = self.make_request("POST", "/passport/auth/register", data=data)
        if result:
            logging.info("注册成功")
        else:
            logging.error("注册失败")

    def authenticate_user(self):
        """用户登录,并获取 Token"""
        data = {"email": self.email, "password": self.password}
        result = self.make_request("POST", "/passport/auth/login", data=data)
        if result:
            self.token = result["data"]["auth_data"]
            logging.info(f"登录成功,Token: {result['data']['token']}")
        else:
            logging.error("登录失败")
            self.token = None

    def get_subscription_link(self, node_id=None):
        """获取用户订阅链接"""
        endpoint = "/user/getSubscribe"
        if node_id:
            endpoint += f"?node_id={node_id}"
        headers = {"Authorization": self.token}
        result = self.make_request("GET", endpoint, headers=headers)
        if result:
            return result["data"]["subscribe_url"]
        logging.error("获取订阅链接失败,请稍后再试。")
        return None

def generate_random_email():
    """生成随机邮箱地址"""
    domains = ["gmail.com", "qq.com", "163.com", "yahoo.com", 
               "sina.com", "126.com", "outlook.com", "yeah.net", 
               "foxmail.com"]
    username = ''.join(random.choice(string.ascii_lowercase) for _ in range(8))
    domain = random.choice(domains)
    return f"{username}@{domain}"

def generate_random_password():
    """生成随机密码"""
    safe_chars = string.ascii_letters + string.digits + "!@#$%^&*"
    return ''.join(random.choice(safe_chars) for _ in range(12))

if __name__ == "__main__":
    # 初始化客户端,并生成随机账号信息
    client = APIClient()
    email = generate_random_email()
    password = generate_random_password()

    logging.info(f"生成的邮箱: {email}")
    logging.info(f"生成的密码: {password}")

    # 注册并登录
    client.email = email
    client.password = password
    client.register_user()
    client.authenticate_user()

    # 获取订阅链接
    if client.token:
        logging.info("正在获取订阅链接...")
        subscription_link = client.get_subscription_link()
        if subscription_link:
            logging.info(f"订阅链接: {subscription_link}")
        else:
            logging.error("订阅链接获取失败,请稍后再试。")
    else:
        logging.error("无法获取订阅链接,用户登录失败。")

3. 代码结构分析

3.1 全局变量

BASE_URL = "www.laoniu63.top"
  • BASE_URL: 定义 API 服务的主域名。若 API 地址变更,只需修改此处即可。

3.2 APIClient 类

3.2.1. 初始化客户端

class APIClient:
    def __init__(self, email=None, password=None):
        self.base_url = f"https://{BASE_URL}/api/v1"
        self.token = None
        self.email = email
        self.password = password
  • base_url: 拼接后的 API 路径。
  • token: 存储登录后的授权令牌,用于后续操作。

3.2.2. 用户注册

def register_user(self):
    data = {"email": self.email, "password": self.password}
    result = self.make_request("POST", "/passport/auth/register", data=data)
    if result:
        logging.info("注册成功")
    else:
        logging.error("注册失败")
  • 描述: 注册一个新用户。

3.2.3. 用户登录

def authenticate_user(self):
    data = {"email": self.email, "password": self.password}
    result = self.make_request("POST", "/passport/auth/login", data=data)
    if result:
        self.token = result["data"]["auth_data"]
        logging.info(f"登录成功,Token: {result['data']['token']}")
    else:
        logging.error("登录失败")
        self.token = None
  • 描述: 登录用户,并存储 Token。

3.2.4. 获取订阅链接

def get_subscription_link(self, node_id=None):
    endpoint = "/user/getSubscribe"
    if node_id:
        endpoint += f"?node_id={node_id}"
    headers = {"Authorization": self.token}
    result = self.make_request("GET", endpoint, headers=headers)
    if result:
        return result["data"]["subscribe_url"]
    logging.error("获取订阅链接失败,请稍后再试。")
    return None
  • 描述: 根据用户的 Token 获取订阅链接。

3.3 工具函数

生成随机邮箱

def generate_random_email():
    domains = ["gmail.com", "qq.com", "163.com", "yahoo.com", 
               "sina.com", "126.com", "outlook.com", "yeah.net", 
               "foxmail.com"]
    username = ''.join(random.choice(string.ascii_lowercase) for _ in range(8))
    domain = random.choice(domains)
    return f"{username}@{domain}"

生成随机密码

def generate_random_password():
    safe_chars = string.ascii_letters + string.digits + "!@#$%^&*"
    return ''.join(random.choice(safe_chars) for _ in range(12))

4. 示例输出

2024-10-13 10:32:39,587 - INFO - 生成的邮箱: cclxojqt@foxmail.com
2024-10-13 10:32:39,588 - INFO - 生成的密码: YFklUussa4&6
2024-10-13 10:32:40,912 - INFO - 注册成功
2024-10-13 10:32:41,997 - INFO - 登录成功,Token: 740418ea561dcc912075ddc355373825
2024-10-13 10:32:41,997 - INFO - 正在获取订阅链接...
2024-10-13 10:32:42,735 - INFO - 订阅链接: https://www.laoniu63.top/api/v1/client/subscribe?token=740418ea561dcc912075ddc355373825

5. 注意事项

  1. API 地址: 如果 API 地址或机场变更,只需调整 BASE_URL 即可。
  2. 依赖: 请确保你已经安装了 requests 库,如果没有,请通过 pip install requests 安装
  3. 错误处理: 请求失败时会打印详细的错误信息,方便排查问题。

6. 总结

此 Python 客户端可以快速完成 用户注册、登录订阅链接 获取,代码结构清晰,方便开发者扩展与重用。


白嫖V2Board试用流量
https://rollday.site/2024/10/13/白嫖V2Board试用流量/
作者
RollDay
发布于
2024年10月13日
更新于
2025年4月5日
许可协议