I'd like to access some website to get some information. To do that, I write a python function which accesses the website with a given frequency. ALso, I learnt that to prevent potential DDOS suspection due to frequent access, I may delay access to the website after some exception. I decides to wait some rounds if any exception occurs. Thus I write the following codes:
ddos_prevention = {'continuous_suspected_times': 0, 'to_wait_rounds': 0}
request_url = 'http://store.apple.com/' #just an example url
while True:
print get_response_without_ddos_suspect(request_url, ddos_prevention)
sleep(1)
def get_response_without_ddos_suspect(request_url, ddos_prevention):
if ddos_prevention['to_wait_rounds'] == 0:
try:
response = requests.get(request_url)
if response.status_code == 200:
if ddos_prevention['continuous_suspected_times'] != 0:
print '%s: Finally it works after %s rounds of waiting, request_url: %s' % (
datetime.now(), math.pow(2, ddos_prevention['continuous_suspected_times']), request_url)
ddos_prevention['continuous_suspected_times'] = 0
return response.json()
except Exception as e:
ddos_prevention['continuous_suspected_times'] += 1
ddos_prevention['to_wait_rounds'] = math.pow(2, ddos_prevention['continuous_suspected_times'])
print '%s: DDOS suspected for the %sst times and wait %s rounds, exception: %s, request_url: %s' % (
datetime.now(), ddos_prevention['continuous_suspected_times'], ddos_prevention['to_wait_rounds'], e, request_url)
return None
else:
ddos_prevention['to_wait_rounds'] -= 1
print 'to_wait_rounds: %s, request_url: %s' % (ddos_prevention['to_wait_rounds'], request_url)
return None
Luckily, it seems to work. However, it's far from beening ideal, because: 1) the codes are so tedious, 2) the codes don't handel different exceptions, so that I may omit many signals.
PLease gives some code examples or modular for my situation, which can access the website with high frequency yet without causing DOS suspection of the given website to deny my access.