代码之家  ›  专栏  ›  技术社区  ›  Jav_Rock Rahul N

为什么在python日志记录HTTPHandler中需要h.getresponse()?

  •  1
  • Jav_Rock Rahul N  · 技术社区  · 6 年前

    我重写了方法 emit 属于 python日志记录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 回复  |  直到 6 年前
        1
  •  1
  •   Vinay Sajip    6 年前

    这个 getresponse()