-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathproxy.py
62 lines (49 loc) · 2.13 KB
/
proxy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# !/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# @Time: 2021/4/1 14:20
import requests
from config import global_config
from logger import logger
class Proxy(object):
enable = None
proxy_pool_url = None
current_proxy_ip = None
def __init__(self):
self.enable = global_config.get_raw('proxy_pool', 'enable')
self.proxy_pool_url = global_config.get_raw('proxy_pool', 'proxy_pool_url')
def get_proxy(self):
if self.enable != 'true':
return None
retry_count = 10
timeout = 2
while retry_count > 0:
# noinspection PyBroadException
try:
ip_pool_response = requests.get(self.proxy_pool_url + "/get")
except Exception:
logger.error('【ip池】连接失败')
return None
proxy_ip = ip_pool_response.json().get("proxy", None)
if proxy_ip is None:
logger.info('【ip池】当前为空池')
return None
# noinspection PyBroadException
try:
response1 = requests.get('http://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history',
proxies={"http": "http://{}".format(proxy_ip)}, timeout=timeout)
response2 = requests.get('http://api.bilibili.com/x/space/acc/info', proxies={"http": "http://{}".format(proxy_ip)}, timeout=timeout)
if response1.status_code == requests.codes.OK and response2.status_code == requests.codes.OK:
logger.info('【ip池】获取ip成功: {}'.format(proxy_ip))
return proxy_ip
except ConnectionRefusedError:
retry_count -= 1
self.delete_proxy(proxy_ip)
except Exception:
retry_count -= 1
logger.info('【ip池】尝试10次均未获取到有效ip'.format(retry_count))
return None
def delete_proxy(self, proxy_ip):
requests.get(self.proxy_pool_url + "/delete/?proxy={}".format(proxy_ip))
logger.info('【ip池】移除ip: {}'.format(proxy_ip))
my_proxy = Proxy()