2013-04-10 23 views
11

Tôi đang cố gắng sử dụng hỗ trợ socket mới cho Google App Engine để thực hiện một số truy vấn DNS. Tôi đang sử dụng dnspython để thực hiện truy vấn và mã hoạt động tốt bên ngoài GAE.Truy vấn DNS bằng cách sử dụng ổ cắm Google App Engine

Mã này là như sau:

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) 

Khi tôi chạy trong GAE tôi nhận được lỗi sau:

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 

nào được nêu ra bởi dnspython khi không có câu trả lời sẽ được trả trong thời hạn. Tôi đã tăng thời gian lên đến 60 giây, và DnsQuery là một nhiệm vụ, nhưng vẫn nhận được cùng một lỗi.

Có giới hạn nào trong việc triển khai ổ cắm Google App Engine, điều này ngăn cản việc thực hiện yêu cầu DNS không?

+0

Tôi cũng gặp sự cố tương tự với Google App Engine. – Uri

+0

@Cyril N: kiểm tra rằng ngoài việc có ứng dụng trả tiền, bạn cũng đặt ngân sách hàng ngày - ít nhất là năm ngoái có báo cáo về một số tính năng chỉ trả tiền không hoạt động đúng cho đến khi ngân sách hàng ngày được khởi tạo. –

+0

@DanCornilescu Tôi đã đến Thanh toán> Ngân sách & Cảnh báo và tôi đã xác định cảnh báo về một số ngưỡng nhất định. Đó có phải ý của bạn? Tôi đọc tại http://stackoverflow.com/a/10894376/330867 rằng 'Google sẽ đợi cho đến khi khoản thanh toán đầu tiên bị xóa trước khi tăng hạn ngạch thư của bạn.'. Có lẽ đó là vấn đề của tôi. Nhưng sau đó tôi đã đi đến App Engine> Quota của tôi, và tôi có thể thấy rằng dưới mục Sockets, ứng dụng của tôi đã thực hiện một số yêu cầu (có thể sử dụng gói Python 'requests', mà tôi sử dụng). Vì vậy, 'Sockets' sẽ làm việc, nhưng không phải với' dnspython'? –

Trả lời

7

Đây là lỗi và sẽ được khắc phục càng sớm càng tốt.

Cách giải quyết khác, chuyển đối số nguồn = '' tới dns.resolver.query.

tcp = Đúng là không cần thiết.

+0

Nó hoạt động! Tôi cũng sẽ cập nhật trình theo dõi vấn đề. – ROOTto

+1

Nó không hoạt động cho tôi bây giờ. Có cách nào khác không? – Uri

+0

Như VJudge đã đề cập, nó có thể chỉ làm việc cho các ứng dụng trả tiền, có lẽ đó là lý do giải pháp này không hiệu quả với bạn Uri? –

1

Không. Không có giới hạn về cổng UDP. (chỉ các cổng smtp trên TCP).

Có thể xảy ra sự cố với định tuyến dịch vụ socket. Vui lòng gửi một vấn đề với trình theo dõi vấn đề công cụ ứng dụng. https://code.google.com/p/googleappengine/issues/list

1

dnspython đang sử dụng socket. Tuy nhiên, ổ cắm chỉ có sẵn trong trả ứng dụng. 1

Các vấn đề liên quan