151 lines
3.9 KiB
Python
151 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
||
# !/usr/bin/env python
|
||
"""
|
||
-------------------------------------------------
|
||
File Name: ProxyApi.py
|
||
Description : WebApi
|
||
Author : JHao
|
||
date: 2016/12/4
|
||
-------------------------------------------------
|
||
Change Activity:
|
||
2016/12/04: WebApi
|
||
2019/08/14: 集成Gunicorn启动方式
|
||
-------------------------------------------------
|
||
"""
|
||
__author__ = 'JHao'
|
||
|
||
import json
|
||
import sys
|
||
import platform
|
||
import requests
|
||
from werkzeug.wrappers import Response
|
||
from flask import Flask, jsonify, request
|
||
|
||
sys.path.append('../')
|
||
|
||
from Config.ConfigGetter import config
|
||
from Manager.ProxyManager import ProxyManager
|
||
|
||
app = Flask(__name__)
|
||
|
||
|
||
class JsonResponse(Response):
|
||
@classmethod
|
||
def force_type(cls, response, environ=None):
|
||
if isinstance(response, (dict, list)):
|
||
response = jsonify(response)
|
||
|
||
return super(JsonResponse, cls).force_type(response, environ)
|
||
|
||
|
||
app.response_class = JsonResponse
|
||
|
||
api_list = {
|
||
'get': u'get an useful proxy',
|
||
# 'refresh': u'refresh proxy pool',
|
||
'get_all': u'get all proxy from proxy pool',
|
||
'delete?proxy=127.0.0.1:8080': u'delete an unable proxy',
|
||
'get_status': u'proxy number'
|
||
}
|
||
|
||
|
||
@app.route('/')
|
||
def index():
|
||
return api_list
|
||
|
||
|
||
@app.route('/get/')
|
||
def get():
|
||
proxy = ProxyManager().get()
|
||
return proxy.info_json if proxy else {"code": 0, "src": "no proxy"}
|
||
|
||
|
||
@app.route('/refresh/')
|
||
def refresh():
|
||
# TODO refresh会有守护程序定时执行,由api直接调用性能较差,暂不使用
|
||
# ProxyManager().refresh()
|
||
pass
|
||
return 'success'
|
||
|
||
|
||
@app.route('/get_all/')
|
||
def getAll():
|
||
proxies = ProxyManager().getAll()
|
||
return jsonify([_.info_dict for _ in proxies])
|
||
|
||
|
||
@app.route('/delete/', methods=['GET'])
|
||
def delete():
|
||
proxy = request.args.get('proxy')
|
||
ProxyManager().delete(proxy)
|
||
return {"code": 0, "src": "success"}
|
||
|
||
|
||
@app.route('/get_status/')
|
||
def getStatus():
|
||
status = ProxyManager().getNumber()
|
||
return status
|
||
|
||
|
||
@app.route('/get_balance')
|
||
def getBalance():
|
||
try:
|
||
form_data = {
|
||
'appkey': '0af3f486bb6988283af092cf24aace57',
|
||
'uid': '341358'
|
||
}
|
||
# rsp = requests.post('https://api.ipidea.net/api/open/flow_left', data=form_data)
|
||
rsp = requests.get('http://big_customer.willmam.com/index/index/get_my_balance?neek=112361&appkey=d2f6393b46afab108b038ab5b95f45d6')
|
||
rsp_str = rsp.content.decode()
|
||
rsp_json= json.loads(rsp_str)
|
||
# if rsp_json['ret_data']['flow_left'] > 0:
|
||
# rsp_json['flow_status'] = 'ok'
|
||
if rsp_json['data']['balance'] > 0:
|
||
rsp_json['balance_status'] = 'ok'
|
||
return rsp_json
|
||
except Exception as e:
|
||
return repr(e)
|
||
|
||
|
||
if platform.system() != "Windows":
|
||
import gunicorn.app.base
|
||
from six import iteritems
|
||
|
||
|
||
class StandaloneApplication(gunicorn.app.base.BaseApplication):
|
||
|
||
def __init__(self, app, options=None):
|
||
self.options = options or {}
|
||
self.application = app
|
||
super(StandaloneApplication, self).__init__()
|
||
|
||
def load_config(self):
|
||
_config = dict([(key, value) for key, value in iteritems(self.options)
|
||
if key in self.cfg.settings and value is not None])
|
||
for key, value in iteritems(_config):
|
||
self.cfg.set(key.lower(), value)
|
||
|
||
def load(self):
|
||
return self.application
|
||
|
||
|
||
def runFlask():
|
||
app.run(host=config.host_ip, port=config.host_port)
|
||
|
||
|
||
def runFlaskWithGunicorn():
|
||
_options = {
|
||
'bind': '%s:%s' % (config.host_ip, config.host_port),
|
||
'workers': 4,
|
||
'accesslog': '-', # log to stdout
|
||
'access_log_format': '%(h)s %(l)s %(t)s "%(r)s" %(s)s "%(a)s"'
|
||
}
|
||
StandaloneApplication(app, _options).run()
|
||
|
||
|
||
if __name__ == '__main__':
|
||
if platform.system() == "Windows":
|
||
runFlask()
|
||
else:
|
||
runFlaskWithGunicorn()
|