基于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
运行结果如下图:
文章属于原创,转载请注明出处!