使用 requests 获取客户端和服务端 IP 地址和端口时捕获到如下异常:
'WrappedSocket' object has no attribute 'getsockname'
'WrappedSocket' object has no attribute 'getpeername'
之前是访问 HTTP 请求,可以正常获取到地址和端口号,修改为 HTTPS 后,抛出异常。
在 stackoverflow 找到解决方案。
地址:https://stackoverflow.com/questions/22492484/how-do-i-get-the-ip-address-from-a-http-request-using-the-requests-library
方案:
try:
server_ip, server_port = response.raw.connection.sock.getpeername()
except AttributeError as ex:
# logger.warning(f"failed to get server address info: {ex}")
server_ip, server_port = response.raw.connection.sock.socket.getpeername()
logger.debug(f"server IP: {server_ip}, \tPort: {server_port}")
获取客户端同理。