my_drone
@my_drone

Как заставить работать Python код после отлова ошибки но уже с новыми значениями в переменной?

Суть вопроса в # коментах к коду

import requests
import urllib
from random import choice
from colorama import Fore, Back, Style

url = "http://3g2upl4pq6kufc4m.onion"  # контрольный адрес для проверки работоспособности (код 200)

def ururu():                                               # генерирует рандомный URL
     digits = "abcdefghijklmnopqrstuvwxyz234567"

     adr = "http://" + "".join([choice(digits) for _ in range(16)]) + '.onion'


     return adr


def getdata(adr):

    try:
            print(Fore.GREEN +"I will try => " '%s' %(adr))
            proxies = {'http': 'socks5h://127.0.0.1:9050','https': 'socks5h://127.0.0.1:9050'}
            data = requests.get(adr, proxies=proxies)
            t = data.status_code == requests.codes.ok
            print("Site data " '%s' % (data))
            print("Response " '%s' %(t))

    except requests.exceptions.InvalidURL:
            print("InvalidURL")
    except requests.ConnectionError:     # но как скормить переменной новый URL после отлова ошибки?()
            print("ConnectionError")          # при каждом неверном адресе будет ошибка.Как перебрать Все url? 
            return data


Я понимаю что перебор всех доменов сети Тор слишком долгий процесс..

Но уже неделю мне недает покоя эта задача. =(
  • Вопрос задан
  • 313 просмотров
Решения вопроса 2
  • @maxfox
    Подправил ваш код, перебирает все 5-символьные домены зоны .ru (лень было разбираться с Тором):
    Результаты можно грепать или просто не выводить ничего при ошибке. Ну, в общем идея понятна, с остальным сами разберетесь.
    import requests
    from sys import argv
    from random import choice
    from colorama import Fore, Back, Style
    from itertools import islice
    
    def ururu():
        digits = "abcdefghijklmnopqrstuvwxyz234567"
        while (True):
            yield "http://" + "".join([choice(digits) for _ in range(5)]) + '.ru'
    
    def getdata(adr):
        try:
                data = requests.get(adr)
                print("{} {} OK".format(Fore.GREEN, adr))
        except requests.exceptions.InvalidURL:
                print("{}InvalidURL".format(Fore.RED))
        except requests.ConnectionError:
                print("{}{} ConnectionError".format(Fore.RED, adr))
    
    if __name__ == '__main__':
        try:
            limit = int(argv[1])
        except (IndexError, ValueError):
            limit = 100
        for addr in islice(ururu(), limit):
            getdata(addr)
    Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы