Python 使用Google应用程序引擎套接字进行DNS查询

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

我正在尝试使用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.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提到的,它可能只适用于付费应用,也许这就是为什么这个解决方案不适用于你?