|
|
|
#!/usr/bin/env python3
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
import time
|
|
|
|
import requests
|
|
|
|
from Basis.Logger import logging
|
|
|
|
from Basis.Functions import hostFormat
|
|
|
|
|
|
|
|
|
|
|
|
def httpPing(taskId: str, url: str, socksAddr: str, socksPort: int, timeout: int) -> float:
|
|
|
|
try:
|
|
|
|
startTime = time.time_ns() # request start time
|
|
|
|
socksProxy = 'socks5://%s:%i' % (hostFormat(socksAddr, v6Bracket = True), socksPort)
|
|
|
|
logging.debug('[%s] Http ping -> request %s via %s' % (taskId, url, socksProxy))
|
|
|
|
httpRequest = requests.get(url, proxies = { # send http request by socks5 proxy
|
|
|
|
'http': socksProxy,
|
|
|
|
'https': socksProxy,
|
|
|
|
}, timeout = timeout)
|
|
|
|
except: # something error on request process (timeout or proxy not working)
|
|
|
|
logging.debug('[%s] Http ping -> request error' % taskId)
|
|
|
|
return -1
|
|
|
|
if httpRequest.status_code not in range(200, 300): # http code not 2xx
|
|
|
|
logging.debug('[%s] Http ping -> status code %i not expected' % (taskId, httpRequest.status_code))
|
|
|
|
return -1
|
|
|
|
delay = (time.time_ns() - startTime) / (10 ** 6) # ns -> ms
|
|
|
|
logging.debug('[%s] Http ping -> delay %f ms' % (taskId, delay))
|
|
|
|
return round(delay, 2) # two decimal places
|
|
|
|
|
|
|
|
|
|
|
|
def check(taskId: str, socksInfo: dict, options: dict) -> dict:
|
|
|
|
# TODO: multi check (options -> times)
|
|
|
|
return {
|
|
|
|
'delay': httpPing(taskId, options['url'], socksInfo['addr'], socksInfo['port'], options['timeout'])
|
|
|
|
}
|