2013-04-10 2 views
11

일부 DNS 쿼리를 수행하기 위해 Google App Engine에 대한 새로운 소켓 지원을 사용하려고합니다. dnspython을 사용하여 쿼리를 수행했으며 코드는 GAE 외부에서 올바르게 작동합니다.Google App Engine 소켓을 사용하는 DNS 쿼리

코드는 다음

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에서 실행하면 나는 다음과 같은 오류가 발생합니다 :

아무 대답이 제한 시간 내에 반환하지 않을 경우 dnspython에 의해 발생
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 

. timelimit을 60 초로 늘렸고 DnsQuery는 작업이지만 여전히 동일한 오류가 발생합니다.

Google App Engine 소켓 구현에 DNS 요청을 실행할 수 없도록 제한이 있습니까?

+0

Google App Engine에도 비슷한 문제가 있습니다. – Uri

+0

@Cyril N : 유료 앱 외에도 일일 예산을 설정했는지 확인하십시오. 적어도 작년에는 일일 예산이 초기화 될 때까지 유료 기능 만 제대로 작동하지 않는다는보고가있었습니다. –

+0

@ DanCornilescu Billing> Budgets & Alerts에 갔다가 특정 threeshold에 대한 경고를 이미 정의했습니다. 그게 당신이 의미 한 것입니까? 나는 http://stackoverflow.com/a/10894376/330867에서 'Google은 귀하의 메일 할당량을 증가시키기 전에 첫 번째 지불이 완료 될 때까지 기다릴 것입니다 .'라고 읽었습니다. 아마 그게 내 문제 야. 그런 다음 App Engine> Quotas로 이동하여 소켓 항목 아래에서 앱이 요청을 한 것 (사용하는 Python 패키지'requests'을 사용했을 수도 있음)을 확인할 수 있습니다. 그래서'소켓'은 작동하지만'dnspython'과는 작동하지 않아야합니까? –

답변

7

이것은 버그이며 최대한 빨리 수정됩니다.

해결 방법으로 dns.resolver.query에 source = '인수를 전달하십시오.

tcp = True는 필요하지 않습니다.

+0

문제 추적기를 업데이트하겠습니다. – ROOTto

+1

지금은 제대로 작동하지 않았습니다. 다른 해결 방법이 있습니까? – Uri

+0

VJudge가 언급 했으므로 유료 앱에서만 작동 할 수 있습니다. 어쩌면이 솔루션이 Uri에서 작동하지 않는 이유일까요? –

1

dnspython이 socket을 사용 중입니다. 그러나 소켓은 앱에서만 사용할 수 있습니다. 1