Python 使用Google应用程序引擎套接字进行DNS查询
我正在尝试使用Google App Engine的新套接字支持来执行一些DNS查询。我正在使用执行查询,代码在GAE之外运行良好 代码如下:Python 使用Google应用程序引擎套接字进行DNS查询,python,google-app-engine,dns,Python,Google App Engine,Dns,我正在尝试使用Google App Engine的新套接字支持来执行一些DNS查询。我正在使用执行查询,代码在GAE之外运行良好 代码如下: class DnsQuery(webapp2.RequestHandler): def get(self): domain = self.request.get('domain') logging.info("Test Query for "+domain) answers = dns.resolver
class DnsQuery(webapp2.RequestHandler):
def get(self):
domain = self.request.get('domain')
logging.info("Test Query for "+domain)
answers = dns.resolver.query(domain, 'TXT', tcp=True)
logging.info("DNS OK")
for rdata in answers:
rc = str(rdata.exchange).lower()
logging.info("Record "+rc)
在GAE中运行时,出现以下错误:
File "/base/data/home/apps/s~/one.366576281491296772/main.py", line 37, in post
return self.get()
File "/base/data/home/apps/s~/one.366576281491296772/main.py", line 41, in get
answers = dns.resolver.query(domain, 'TXT', tcp=True)
File "/base/data/home/apps/s~/one.366576281491296772/dns/resolver.py", line 976, in query
raise_on_no_answer, source_port)
File "/base/data/home/apps/s~/one.366576281491296772/dns/resolver.py", line 821, in query
timeout = self._compute_timeout(start)
File "/base/data/home/apps/s~/one.366576281491296772/dns/resolver.py", line 735, in _compute_timeout
raise Timeout
dnspython在时间限制内未返回答案时引发。我已经将时间限制提高到60秒,DnsQuery是一项任务,但仍然会出现相同的错误
Google应用程序引擎套接字实现中是否存在阻止DNS请求执行的限制 否。UDP端口没有限制。(仅TCP上的smtp端口)
套接字服务路由可能存在问题。请向应用程序引擎问题跟踪器提交问题 这是一个bug,将尽快修复 作为解决方法,将source=''参数传递给dns.resolver.query
tcp=True不是必需的。dnspython正在使用
socket
。然而,socket仅在付费应用程序中可用。我在谷歌应用程序引擎上也有类似的问题。@Cyril N:检查一下,除了付费应用程序之外,你还为它设置了每日预算-至少去年有报告称,在每日预算初始化之前,一些仅付费的功能无法正常工作。@DanCornilescu I转到Billing>Budgets&Alerts,我已经定义了一个关于特定三个方面的警报。这就是你的意思吗?我在上读到,谷歌会等到第一笔付款结清后再增加你的邮件配额。
。也许这是我的问题。但是后来我转到了我的appengine>Quotas,我可以看到在Sockets条目下,我的App执行了一些请求(可能使用了Python包requests
,我使用了它)。所以,Sockets
应该可以工作,但不能与dnspython
?@cyrin一起工作。我的意思是:(你需要调整新开发人员控制台的位置,快捷方式是)@DanCornilescu我有两个类似的项目(dev/prod),prod已经启用了计费功能(从你的链接),所以我用它进行了测试,但仍然不起作用:/it现在对我不起作用。还有其他的解决方法吗?正如VJudge提到的,它可能只适用于付费应用,也许这就是为什么这个解决方案不适用于你?