Экземпляр класса не может вернуть атрибут объекта даже при успешном выполнении полного метода на нем

У меня есть фрагмент кода, который вызовет URL-адрес (JS) и вернет результат.

Я хочу, чтобы HTTP-вызов был защищен с помощью https, однако ЦС сертификата целевого URL-адреса по умолчанию не существует с модулем запроса python.

поэтому я намеревался использовать модуль certifi, написав функцию, которая будет проверять издателя сертификата URL-адреса по файлу certifi pem, если он не существует, он добавит загруженный сертификат CA в файл pem модуля certifi.

Вышеупомянутая функция будет вызываться перед фактическим вызовом запроса, поэтому в случае отсутствия сертификата функция добавит сертификат и вызовет ту же родительскую функцию, чтобы сделать успешный вызов запроса, чтобы результат был зарегистрирован.

Вот код sudo,

class GnibUrlGenerator:
  def __init__(self):
     (......)
  def validate_params(self):
     (......)
  def check_cert_issuer_exists(self, certcryptoobj):
     (.....)
  def add_interca_cert(self):
     (.....)
  def getavailable_appointment(self):
    try:
        self.validate_params()
        # print (self.CabundleObj)
        self.check_cert_issuer_exists(self.CertCryptoObj)
        return requests.get(self.url + '(getApps4DT)?', params=(
                            self.page, ('dt', self.date), ('cat', self.cat), ('sbcat', self.sbcat),
                            ('typ', self.type)), headers=self.headers, verify=True)
    except (CategoryValueError, TypeValueError) as err:
        print(err)
    except RequestException as err:
        print(err, 'So adding IntermediateCA chain to CA store.')
        self.add_interca_cert()
        self.getavailable_appointment()
        #print('call')



   url = GnibUrlGenerator  
   a = url.getavailable_appointment()
   print(a.url, '\n', a.headers, '\n', a.text, '\n', a.status_code)

err:
AttributeError: 'NoneType' object has no attribute 'url'

Проблема, возникшая здесь, когда я запускаю сценарий в первый раз, как ожидалось, он обнаруживает, что сертификат отсутствует и перехватывается с исключением как «RequestException», и запускает операторы в блоке except.

except RequestException as err:
            print(err, 'So adding IntermediateCA chain to CA store.')
            self.add_interca_cert()
            self.getavailable_appointment()
            #print('call')

поэтому это означает добавить недостающий сертификат и снова выполнить тот же вызов функции.

Хотя вызов функции первого класса является успешным, ему не удалось получить успешный объект запроса в созданном из него экземпляре.

Но всегда следующий прогон возвращает результаты.

Как это переписать, чтобы избавиться от этой проблемы.

Сообщите нам сообщение об ошибке полный, включая трассировку стека. Кроме того, у этого последнего блока странный отступ. Кроме того, url = GnibUrlGenerator, вероятно, должен быть url = GnibUrlGenerator()…?

deceze 10.09.2018 11:48

Почему бы вам не предположить, что сертификат отсутствует по умолчанию, и не добавить его заранее, а не делать это только в случае сбоя запроса?

deceze 10.09.2018 11:49

Вот подробный код,

sabarinath gnanasekar 10.09.2018 11:53
pastebin.com/embed_iframe/qeDesiPS
sabarinath gnanasekar 10.09.2018 11:59

Я не предполагаю, что сертификат отсутствует, но я знаю, что он отсутствует из-за ошибки, когда я запрашиваю звонок.

sabarinath gnanasekar 10.09.2018 12:01

Я имею в виду, если вы можете быть уверены, что сертификат будет отсутствовать, добавьте его перед всеми без исключения запросами, вместо того, чтобы ждать, пока запрос не удастся, а затем повторять его.

deceze 10.09.2018 12:02
0
6
15
0

Другие вопросы по теме