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


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

Но уже неделю мне недает покоя эта задача. =(
  • Вопрос задан
  • 322 просмотра
Решения вопроса 2
@Weridy
Что мешает вызвать функцией саму себя в екзепшине с "другим" параметром
Ответ написан
@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
Похожие вопросы