<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: pikadoramon</title>
    <description>The latest articles on DEV Community by pikadoramon (@pikadoramon).</description>
    <link>https://dev.to/pikadoramon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1134548%2F90fa3467-a8ab-44d3-a2b8-204a2eb777d9.png</url>
      <title>DEV Community: pikadoramon</title>
      <link>https://dev.to/pikadoramon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pikadoramon"/>
    <language>en</language>
    <item>
      <title>How to Save Your TikTok Videos Before They’re Gone: A Simple Tool to Backup Your Content</title>
      <dc:creator>pikadoramon</dc:creator>
      <pubDate>Fri, 17 Jan 2025 05:09:12 +0000</pubDate>
      <link>https://dev.to/pikadoramon/how-to-save-your-tiktok-videos-before-theyre-gone-a-simple-tool-to-backup-your-content-4d6g</link>
      <guid>https://dev.to/pikadoramon/how-to-save-your-tiktok-videos-before-theyre-gone-a-simple-tool-to-backup-your-content-4d6g</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In a world where online content can be taken down at any moment due to regional restrictions, account bans, or service outages, ensuring your digital content is safe is more important than ever. For TikTok users, this can mean saving videos to your local storage to preserve them. Whether you’re worried about future account suspensions or you simply want to back up your favorite videos, this tool is here to help you download and save TikTok videos effortlessly.&lt;/p&gt;

&lt;p&gt;In this post, I’ll introduce SaveMyTikTok, a third-party automated TikTok data collection tool that helps users save TikTok videos without the need for login credentials. It’s built on top of the &lt;a href="https://github.com/davidteather/TikTok-Api" rel="noopener noreferrer"&gt;TikTok-Api&lt;/a&gt; framework and ensures that you can still access and save content, even if TikTok services are restricted in your region.&lt;/p&gt;

&lt;p&gt;Additionally, SaveMyTikTok makes it easy to repurpose and share your downloaded videos on platforms like &lt;code&gt;Little RedNote&lt;/code&gt;(Xiaohongshu), YouTube Shorts, and Instagram Reels. Whether you’re a content creator looking to expand your audience or just someone who wants to keep their favorite videos available, this tool allows you to seamlessly export and redistribute your content across different social media platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  About SaveMyTikTok
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SaveMyTikTok&lt;/strong&gt; is an open-source tool designed to back up both your own TikTok videos as well as videos from other users. It’s a simple way to download and save your TikTok videos directly to local storage, providing a safeguard against any disruptions you might face when accessing TikTok.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Login Required&lt;/strong&gt; – You don’t need to provide your credentials to download videos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save Any Video&lt;/strong&gt; – Download your own watermark-free TikTok videos or those of other users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export Support&lt;/strong&gt; – Export video data for further use and analysis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tool is especially useful for users who want to ensure that their content remains accessible, even if TikTok becomes unavailable in their region or account restrictions are enforced.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;Using &lt;strong&gt;SaveMyTikTok&lt;/strong&gt; is simple. All you need is Python 3.8+ and the necessary dependencies to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation &amp;amp; Usage
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Install Python Dependencies:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Make sure you have Python 3.8+ installed on your system, then run the following command to install the required dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Install Playwright:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To make sure everything works smoothly, install Playwright:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python &lt;span class="nt"&gt;-m&lt;/span&gt; playwright &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Run the Script:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, you’re ready to run the script. Use the following command to save videos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   python main.py &lt;span class="nt"&gt;--url&lt;/span&gt; https://www.tiktok.com/@soomile &lt;span class="nt"&gt;--output&lt;/span&gt; test.csv &lt;span class="nt"&gt;--count&lt;/span&gt; 10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will save videos from the given TikTok user URL and output the data to a CSV file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Output
&lt;/h2&gt;

&lt;p&gt;Once you run the script, the output will contain the saved video details, such as video URLs, user information, and metadata for further use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgu7k125dw90mu1vl7agw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgu7k125dw90mu1vl7agw.png" alt="Image description" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Support &amp;amp; Contributions
&lt;/h2&gt;

&lt;p&gt;If you find this tool useful, please consider giving it a ⭐ on GitHub. Your support helps improve the tool and contributes to the community.&lt;/p&gt;

&lt;p&gt;For any questions or issues, feel free to reach out via:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📢 Telegram: t.me/worldVarspeace&lt;/li&gt;
&lt;li&gt;💼 Upwork: &lt;a href="https://www.upwork.com/freelancers/~01830048df1d989f02?viewMode=1" rel="noopener noreferrer"&gt;View Profile&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Acknowledgements
&lt;/h2&gt;

&lt;p&gt;This project leverages the technical foundation provided by the &lt;a href="https://github.com/davidteather/TikTok-Api" rel="noopener noreferrer"&gt;TikTok-Api&lt;/a&gt; repository. We would like to express our gratitude to the contributors for their invaluable work, which has made this project possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Whether you’re an avid TikTok creator, a casual viewer, or just someone who wants to ensure their favorite TikTok videos are preserved, SaveMyTikTok provides a simple and effective solution. Start backing up your content today, and never worry about losing it again.&lt;/p&gt;

&lt;p&gt;Check out the full project and get started: &lt;a href="https://github.com/pikadoramon/SaveMyTikTok" rel="noopener noreferrer"&gt;SaveMyTikTok&lt;/a&gt; GitHub&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to build your own proxy IP pool using ExpressVPN?</title>
      <dc:creator>pikadoramon</dc:creator>
      <pubDate>Mon, 07 Aug 2023 10:26:04 +0000</pubDate>
      <link>https://dev.to/pikadoramon/how-to-build-your-own-proxy-ip-pool-using-expressvpn-449g</link>
      <guid>https://dev.to/pikadoramon/how-to-build-your-own-proxy-ip-pool-using-expressvpn-449g</guid>
      <description>&lt;h1&gt;
  
  
  How to build your own proxy IP pool using ExpressVPN
&lt;/h1&gt;

&lt;p&gt;Supported platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10&lt;/li&gt;
&lt;li&gt;Ubuntu 20.04+&lt;/li&gt;
&lt;li&gt;CentOS 7.5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 1: Purchase an ExpressVPN account and obtain a 23-character activation code.&lt;/p&gt;

&lt;p&gt;Step 2: Install Docker and pull the latest image of "pikadoramon/expressvpn".&lt;/p&gt;

&lt;p&gt;Step 3: Run the Docker container with the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "~&amp;gt; Run testing container..."
docker run \
    --env=ACTIVATION_CODE=${ACTIVATION_CODE} \
    --env=SERVICE=full_groxy \
    --cap-add=NET_ADMIN \
    --device=/dev/net/tun \
    --privileged \
    --detach=true \
    --tty=true \
    --name=expressvpn-proxy \
    -p 50100:50100 -p 50101:50101 -p 50099:50099 \
    pikadoramon/expressvpn:latest
echo ""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4: Test if the image is successfully launched by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl http://127.0.0.1:50099/ok
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Here is a Python wrapper for managing VPN
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name：     proxy_admin
   Description :
   Author :       pikadoramon
   date：          2023/8/4
-------------------------------------------------
   Change Activity:
                   2023/8/4:
-------------------------------------------------
"""
__author__ = 'pikadoramon'
import json
import time



import random
import requests
import hashlib
from urllib.parse import urlencode

logger = logging.getLogger(__name__)

def md5(s):
    m = hashlib.md5()
    m.update(s.encode())
    return m.hexdigest()


def generator_headers(data, user, secret):
    request_time = str(int(time.time()))
    md5_str = "reqtime={}|body={}|secret={}20230803796431".format(request_time, data, secret)
    calculate_sign = md5(md5_str)
    return {
        "Spider-Request-Time": request_time,
        "Spider-Sign": calculate_sign,
        "Spider-User": user
    }


class UnExpectError(Exception):
    pass


class ExpressVPNProxyAdmin:

    def __init__(self, addr):

        self._session = requests.Session()

        self.addr = addr
        self._uuid = "20230803796431"
        self.user_name = None
        self._secret = None
        self._vpn_status = None
        self._connect_country = None
        self._acode = None

    def set_admin_account(self, user, secret):
        self.user_name = user
        self._secret = secret

    def _request(self, method, url, headers, body, timeout, retry):
        if retry is None:
            retry = 3
        if timeout is None or timeout &amp;lt; 3:
            timeout = 3

        err = None
        while retry &amp;gt; 0:
            retry -= 1
            try:
                logger.debug("method={} url={} body={}".format(method, url, body))
                resp = self._session.request(method, url,
                                             headers=headers,
                                             json=body,
                                             timeout=timeout)
                return resp
            except Exception as e:
                logger.error("request url fail {}, reason: {}".format(headers, e))
                err = e
        raise err

    def vpn_status(self):
        rnd = "%s" % random.random()
        url = self.addr + "/v1/expressvpn/status?rnd=" + rnd
        headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
        resp = self._request("GET", url, headers, None, 5, 3).json()
        if resp["code"] != 401 and resp["code"] != 400:
            self._connect_country = resp["data"]["Country"]
            self._vpn_status = resp["data"]["CurrentStatus"]
            self._acode = resp["data"]["ACode"]
        return resp

    def vpn_country_list(self, show_all: bool = False):
        rnd = "%s" % random.random()
        url = self.addr + "/v1/expressvpn/list?rnd=" + rnd
        if show_all:
            url += "&amp;amp;num=all"
        headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
        resp = self._request("GET", url, headers, None, 5, 3)
        return resp.json()

    def vpn_disconnect(self):
        rnd = "%s" % random.random()
        url = self.addr + "/v1/expressvpn/disconnect?rnd=" + rnd
        headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
        resp = self._request("GET", url, headers, None, 5, 3)
        return resp.json()

    def vpn_connect(self):

        resp_json = self.vpn_status()
        current_status = resp_json["data"]["CurrentStatus"]
        if current_status == "Not Activated":
            self.vpn_activate()
        elif current_status.startswith("Connected") or current_status.startswith("Connected"):
            self.vpn_disconnect()

        rnd = "%s" % random.random()
        url = self.addr + "/v1/expressvpn/connect?rnd=" + rnd
        headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
        resp = self._request("GET", url, headers, None, 5, 3)
        resp_json = resp.json()
        self.vpn_status()
        return resp_json

    def vpn_activate(self):
        resp_json = self.vpn_status()
        current_status = resp_json["data"]["CurrentStatus"]
        if current_status == "Not Activated":
            rnd = "%s" % random.random()
            url = self.addr + "/v1/expressvpn/activate?rnd=" + rnd
            headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
            resp = self._request("GET", url, headers, None, 5, 3)
            resp_json = resp.json()
            current_status = resp_json["data"]["CurrentStatus"]

        if current_status.startswith("Not Activated"):
            raise UnExpectError("activate fail, unexpect status: %s" % current_status)
        return resp_json

    def vpn_update(self, country="smart", light_way_cipher="auto", preferred_protocol="auto", stop_cron=False):
        params = dict(coutry=country,
                      lightWayCipher=light_way_cipher,
                      preferredProtocol=preferred_protocol,
                      stopCron=str(stop_cron).lower())
        rnd = "%s" % random.random()
        url = self.addr + "/v1/expressvpn/update?" + urlencode(params) + "&amp;amp;rnd=" + rnd
        headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
        resp = self._request("GET", url, headers, None, 5, 3)
        resp_json = resp.json()
        return resp_json

    def vpn_reload(self, code, country="smart", light_way_cipher="auto", preferred_protocol="auto"):
        if not code and not isinstance(code, str) and len(code) &amp;lt; 23:
            raise UnExpectError("激活号应为长度大于等于23个字符的字符串, 而你的是 %s" % code)
        data = dict(code=code,
                    coutry=country,
                    lightWayCipher=light_way_cipher,
                    preferredProtocol=preferred_protocol)

        rnd = "%s" % random.random()
        url = self.addr + "/v1/expressvpn/reload?" + "&amp;amp;rnd=" + rnd
        headers = generator_headers(json.dumps(data).replace(" ", ""), self.user_name, self._secret, self._uuid)
        headers["Content-Type"] = "application/json"
        resp = self._request("POST", url, headers, data, 5, 3)
        resp_json = resp.json()
        return resp_json



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  VPN status
&lt;/h2&gt;

&lt;p&gt;VPN network status indicates whether the network is connected to the VPN server properly. Only when the network status is normal can the VPN forwarding service run correctly. Otherwise, the proxy service will return a 501 status or close the connection.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def vpn_status(self):
    rnd = "%s" % random.random()
    url = self.addr + "/v1/expressvpn/status?rnd=" + rnd
    headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
    resp = self._request("GET", url, headers, None, 5, 3).json()
    if resp["code"] != 401 and resp["code"] != 400:
        self._connect_country = resp["data"]["Country"]
        self._vpn_status = resp["data"]["CurrentStatus"]
        self._acode = resp["data"]["ACode"]
    return resp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Get List of Available VPN Connection Countries
&lt;/h2&gt;

&lt;p&gt;num is an optional parameter. When num is set to 'all', it returns a list of all available countries. Otherwise, it returns a list of countries with the highest network connection speed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def vpn_country_list(self, show_all: bool = False):
    rnd = "%s" % random.random()
    url = self.addr + "/v1/expressvpn/list?rnd=" + rnd
    if show_all:
        url += "&amp;amp;num=all"
    headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
    resp = self._request("GET", url, headers, None, 5, 3)
    return resp.json()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Connect VPN
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def vpn_connect(self):
 
    resp_json = self.vpn_status()
    current_status = resp_json["data"]["CurrentStatus"]
    if current_status == "Not Activated":
        self.vpn_activate()
    elif current_status.startswith("Connected") or current_status.startswith("Connected"):
        self.vpn_disconnect()
 
    rnd = "%s" % random.random()
    url = self.addr + "/v1/expressvpn/connect?rnd=" + rnd
    headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
    resp = self._request("GET", url, headers, None, 5, 3)
    resp_json = resp.json()
    self.vpn_status()
    return resp_json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Disconnect VPN&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def vpn_disconnect(self):
    rnd = "%s" % random.random()
    url = self.addr + "/v1/expressvpn/disconnect?rnd=" + rnd
    headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
    resp = self._request("GET", url, headers, None, 5, 3)
    return resp.json()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Activate VPN&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def vpn_activate(self):
    resp_json = self.vpn_status()
    current_status = resp_json["data"]["CurrentStatus"]
    if current_status == "Not Activated":
        rnd = "%s" % random.random()
        url = self.addr + "/v1/expressvpn/activate?rnd=" + rnd
        headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
        resp = self._request("GET", url, headers, None, 5, 3)
        resp_json = resp.json()
        current_status = resp_json["data"]["CurrentStatus"]
 
    if current_status.startswith("Not Activated"):
        raise UnExpectError("activate fail, unexpect status: %s" % current_status)
    return resp_json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Update Current VPN Network Parameters (Without Restarting)
&lt;/h2&gt;

&lt;p&gt;Update the connection country, encryption method, forwarding protocol, and whether to use a timer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;country: VPN connection country, abbreviated as returned by vpn_country_list&lt;/li&gt;
&lt;li&gt;light_way_cipher: encryption method, select "auto" here&lt;/li&gt;
&lt;li&gt;preferred_protocol: forwarding network protocol, select "auto" here, which represents TCP and UDP&lt;/li&gt;
&lt;li&gt;stop_cron: whether to stop the timer. If set to True, it means not to check the VPN availability periodically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: After updating the VPN network parameters, if you want them to take effect, you need to execute this update interface (update), and then execute the connection (connect).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def vpn_update(self, country="smart", light_way_cipher="auto", preferred_protocol="auto", stop_cron=False):
    params = dict(coutry=country,
                  lightWayCipher=light_way_cipher,
                  preferredProtocol=preferred_protocol,
                  stopCron=str(stop_cron).lower())
    rnd = "%s" % random.random()
    url = self.addr + "/v1/expressvpn/update?" + urlencode(params) + "&amp;amp;rnd=" + rnd
    headers = generator_headers(rnd, self.user_name, self._secret, self._uuid)
    resp = self._request("GET", url, headers, None, 5, 3)
    resp_json = resp.json()
    return resp_json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reset Current VPN Network Parameters (Without Automatic Offline Processing)&lt;/p&gt;

&lt;p&gt;Update the activation code, connection country, encryption method, forwarding protocol, and whether to use a timer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code: activation code used for VPN&lt;/li&gt;
&lt;li&gt;country: VPN connection country, abbreviated as returned by vpn_country_list&lt;/li&gt;
&lt;li&gt;light_way_cipher: encryption method, select "auto" here&lt;/li&gt;
&lt;li&gt;preferred_protocol: forwarding network protocol, select "auto" here, which represents TCP and UDP&lt;/li&gt;
&lt;li&gt;stop_cron: whether to stop the timer. If set to True, it means not to check the VPN availability periodically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: Before resetting the VPN network parameters, you need to manually disconnect the VPN (disconnect), and then execute this reset interface (reload). After that, you can activate (activate) or connect (connect) again.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def vpn_reload(self, code, country="smart", light_way_cipher="auto", preferred_protocol="auto"):
    if not code and not isinstance(code, str) and len(code) &amp;lt; 23:
        raise UnExpectError("The activation code should be a string with a length greater than 32 characters, but yours is %s" % code)
    data = dict(code=code,
                coutry=country,
                lightWayCipher=light_way_cipher,
                preferredProtocol=preferred_protocol)
 
    rnd = "%s" % random.random()
    url = self.addr + "/v1/expressvpn/reload?" + "&amp;amp;rnd=" + rnd
    headers = generator_headers(json.dumps(data).replace(" ", ""), self.user_name, self._secret, self._uuid)
    headers["Content-Type"] = "application/json"
    resp = self._request("POST", url, headers, data, 5, 3)
    resp_json = resp.json()
    return resp_json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
  </channel>
</rss>
