Почему h.getresponse () необходим в журнале Python HTTPHandler? - PullRequest
0 голосов
/ 23 сентября 2018

Я переопределил метод emit из Python Logging httphandler , чтобы адаптировать его к моим потребностям, и заметил строку

h.getresponse()    #can't do anything with the result
  • Зачем нужна эта строка?

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

def emit(self, record):
        """
        Emit a record.
        Send the record to the Web server as a percent-encoded dictionary
        """
        try:
            import http.client, urllib.parse
            host = self.host
            if self.secure:
                h = http.client.HTTPSConnection(host, context=self.context)
            else:
                h = http.client.HTTPConnection(host)
            url = self.url
            data = urllib.parse.urlencode(self.mapLogRecord(record))
            if self.method == "GET":
                if (url.find('?') >= 0):
                    sep = '&'
                else:
                    sep = '?'
                url = url + "%c%s" % (sep, data)
            h.putrequest(self.method, url)
            # support multiple hosts on one IP address...
            # need to strip optional :port from host, if present
            i = host.find(":")
            if i >= 0:
                host = host[:i]
            # See issue #30904: putrequest call above already adds this header
            # on Python 3.x.
            # h.putheader("Host", host)
            if self.method == "POST":
                h.putheader("Content-type",
                            "application/x-www-form-urlencoded")
                h.putheader("Content-length", str(len(data)))
            if self.credentials:
                import base64
                s = ('%s:%s' % self.credentials).encode('utf-8')
                s = 'Basic ' + base64.b64encode(s).strip().decode('ascii')
                h.putheader('Authorization', s)
            h.endheaders()
            if self.method == "POST":
                h.send(data.encode('utf-8'))
            h.getresponse()    #can't do anything with the result
        except Exception:
            self.handleError(record)

1 Ответ

0 голосов
/ 23 сентября 2018

Вызов getresponse() гарантирует, что запрос действительно отправлен на сервер, получив ответ на запрос.

...