gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:00:49 26 4
gpt4 key购买 nike

我重写了pythonlogging httphandler的方法emit以适应我的需要,并且我注意到了这一行

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)

最佳答案

getresponse() 调用通过获取请求的响应来保证请求实际上发送到服务器。

关于python - 为什么 python 日志记录 HTTPHandler 需要 h.getresponse() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52465133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com