Python getaddrbyhost的代理和重试
这个功能一直让我失望,我做得对吗?有没有其他方法可以从IP地址获取域Python getaddrbyhost的代理和重试,python,proxy,Python,Proxy,这个功能一直让我失望,我做得对吗?有没有其他方法可以从IP地址获取域 def ip_to_domain(ip): for i in range(0,4): try: domain = socket.gethostbyaddr(str(ip)) return domain except IOError:
def ip_to_domain(ip):
for i in range(0,4):
try:
domain = socket.gethostbyaddr(str(ip))
return domain
except IOError:
continue
else:
break
else:
return False
感谢您提供的建议。您还需要陷阱
插座。herror
。。。使用类似的方法,检查相关字段中是否有None值
import socket
def lookup(addr):
"""
Example usage:
name, alias, addresslist = lookup('4.2.2.2')
"""
try:
return socket.gethostbyaddr(addr)
except socket.herror:
return None, None, None
如果您想自动查找故障,请执行以下操作
import socket
import time
def relookup(addr):
"""
Example usage:
name, alias, addresslist = relookup('4.2.2.2')
"""
attempts = 1
while (attempts <= 3):
try:
return socket.gethostbyaddr(addr)
except IOError, socket.herror:
time.sleep(5)
attempts += 1
return None, None, None
导入套接字
导入时间
def relookup(地址):
"""
用法示例:
名称、别名、地址列表=relookup('4.2.2.2')
"""
尝试次数=1
虽然(尝试次数受限?那太奇怪了。我怀疑你正在发现同步调用是个坏主意,DNS可能需要很长时间才能告诉你没有答案。真的吗?我不知道这是什么,但在经过大量调试和不断重新运行代码后,它在这一点上开始阻塞,所以我很抱歉我做错了什么,不知道是什么。挖掘名字;)编辑:什么是“同步调用”?很多都在一起?同步调用是在继续之前等待结果的调用。你尝试过完全独立地进行查找吗?啊,对,我明白了。谢谢。不,我不知道怎么做,但我只是一个初学者。嘿,迈克!:)再次感谢,伙计,我应该同时捕获这两个错误吗?即“IOError除外,socket.herror:”还是在不同的行上?哦,是我昨天抽的雪茄,但我改了名字,因为它是|(nt)愚蠢的|(够了):)你可以对IOError
和socket.herror
使用同一行,除非你想在控制台上打印一条关于你所遇到的个别错误的错误消息。@colonwq,请使用relookup()
查看我的编辑。。。在返回无值之前,您可以进行多次查找尝试…哦,很好。所以在那之前我没有做对?我真的不明白我在做什么。我从这里的某个帖子上抄下来的。这是一次尝试,只是东西还没有完全融入其中。为什么有三个没有。哦,对了,每次迭代?谢谢你,先生@colonwq,三个None
值表示由socket.gethostbyaddr()返回的参数
。。。该函数通过单个调用为您提供多个结果值(尽管许多人仅将其用于名称)