基于flask开发VPS切换IP接口

发布时间丨2021-12-08 17:16:31作者丨zhaomeng浏览丨10


现在在工作中时常需要购买并使用VPS进行数据的采集,使用vps的原因在于他就是提供一台虚拟主机,可以通过拨号的方式方便我们切换代理IP.现在的代理平台都是需要实名制的,曾经淘宝可以买到不实名的,但现在买不到了。使用它就好比使用一台电脑一样,需要给他配置拨号上网的账号和密码。那么我们做采集的都知道,数据采集会被目标网站封IP那么这个时候就需要切换代理IP绕过封禁。有两种方式:一种就是通过手动更新代理IP,断开连接重新拨号。第二种就是把他封装成一个函数,每次遇到封禁的时候,调用函数就行。第一种方式显然太笨拙,不利于程序的稳定运行,第二种虽好但是也不利于长时间的使用,容易被串改代码,在数十上百的vps运行时也是不利于移植的。那么最好的方法就是将vps的切换封装成接口的方式。只需要通过配置文件分别配置VPS账号和密码就可以了。最终将其打包成exe文件。代码移植性比较好,使用时将文件放入vps并运行.exe文件就可以访问代理接口:127.0.0.1:6001/changeip。这个工具开发使用了好几个月了,效率比较高,今天有时间就把他记录分享下来。

第一步:了解python3如何模拟运行cmd命令

使用自带的os模块可以运行系统命令我这边使用的是;

os.system()

# python3测试代码如下
import subprocess
import time
import os
import sys
def adsl(f=3,k=60):
    # while True:
    #     os.system('rasdial /disconnect"')
    #     time.sleep(f)
    #     os.system('rasdial 宽带连接 vps账号 vps密码')
    #     time.sleep(k)
    while True:
        os.system('rasdial /disconnect"')
        time.sleep(f)
        os.system('rasdial 宽带连接 vps账号 vps密码')
        time.sleep(k)
if __name__ == "__main__":
    adsl(int(sys.argv[1]),int(sys.argv[2]))
    # sys.argv[1]控制台输入参数

第二部:使用os模块进行拨号重连接(先断开,再链接)

os.system('rasdial /disconnect')
time.sleep(1)
os.system('rasdial 宽带连接' + ' ' + acount + ' ' + pwd)

这样输入账号和密码就可以实现切换代理ip了

第三步:要获取本机切换的成功的ip地址:使用httpbin网站可以获取本机的IP

    try:
        ip = requests.get("http://httpbin.org/ip").json().get("origin")
    except Exception as e:
        return {"code": "failed", "error": e, "vps": {"acount": acount, "pwd": pwd}}
    else:
        return {"code": "success", "IP": ip, "vps": {"acount": acount, "pwd": pwd}}

第四步:使用配置文件的形式接受vps的账号和密码(每台vps的账号密码都是不一样的),需要在文件夹里面创建config.ini文件

import configparser
# 实例化configParser对象
config = configparser.ConfigParser()
# -read读取ini文件
config.read('./config.ini', encoding='utf-8-sig')
acount = config.get('vps', 'acount')
pwd = config.get('vps', 'pwd')

第五步:使用flask进行接口的开发,将上面的几步封装成一个flask接口,创建一个文件,baidupmweb.py(我的命名,命名随意):

from flask import Flask
from flask import Flask, render_template, request, jsonify, redirect
from gevent import pywsgi
import configparser
import requests
import logging
import os
import time

# 在创建 app 之前将 log 级别重置为debug,让其线上 info 日志级别
logging.basicConfig(level=logging.DEBUG)
app = Flask(__name__)

@app.route('/changeip/', methods=["GET", "POST"])
def changeip():
    # 实例化configParser对象
    config = configparser.ConfigParser()
    # -read读取ini文件
    config.read('./config.ini', encoding='utf-8-sig')

    acount = config.get('vps', 'acount')
    pwd = config.get('vps', 'pwd')
    """
    切换vps ip地址,成功就返回IP地址;失败就返回错误信息
    :return:
    """
    app.logger.info(acount)
    app.logger.info(pwd)
    os.system('rasdial /disconnect')
    time.sleep(1)
    # os.system('rasdial 宽带连接 05629694968 111222')
    os.system('rasdial 宽带连接' + ' ' + acount + ' ' + pwd)
    try:
        ip = requests.get("http://httpbin.org/ip").json().get("origin")
    except Exception as e:
        return {"code": "failed", "error": e, "vps": {"acount": acount, "pwd": pwd}}
    else:
        return {"code": "success", "IP": ip, "vps": {"acount": acount, "pwd": pwd}}

if __name__ == '__main__':
   app.run(host='0.0.0.0', port=6001)

就可以正常运行了但是我这里使用的是pywsgi的方式运行(忘了等我想起来再补充为什么?)

if __name__ == '__main__':
    handler = logging.FileHandler('flask.log', encoding='UTF-8')  # 设置日志字符集和存储路径名字
    logging_format = logging.Formatter(  # 设置日志格式
        '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
    handler.setFormatter(logging_format)
    app.logger.addHandler(handler)
    server = pywsgi.WSGIServer(('0.0.0.0', 6001), app)
    server.serve_forever()
    app.run()

每次都会输出日志名称为flask.log

第六步:最后就是将文件打包成exe文件了使用pyinstaller

1.使用pyinstaller包进行打包

安装:pip install pyinstaller

  • -i 给应用程序添加图标
  • -F 指定打包后只生成一个exe格式的文件
  • -D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
  • -c –console, –nowindowed 使用控制台,无界面(默认)
  • -w –windowed, –noconsole 使用窗口,无控制台
  • -p 添加搜索路径
pyinstaller -F baidupmweb.py -i spider.ico

详情文件结构如下:

将上面的文件的dist文件导入到VPS中如下结构:

使用说明如下:

1.打开dist文件找到*.exe的文件点击
2.浏览器输入127.0.0.1:6001/changeip
3.提示切换IP的需要将文件放入vps,并在config.ini中填写账号、密码
4.win10远程桌面可以直接登录vps:S126.VpsYun.CC:26020,密码*****,在里面可以直接访问127.0.0.1:6001/changeip
5.win10 cmd下使用tasklist查看进程。关闭程序taskkill -PID 68452 -F

运行结果如下图:

文章属于原创,转载请注明出处!

推荐文章:win10使用vps方法