2011-07-20 33 views
6

我有一個簡單的Python CGI服務器:如何禁用python webserver中的反向dns查找?

import BaseHTTPServer 
import CGIHTTPServer 
import cgitb; cgitb.enable() ## This line enables CGI error reporting 

server = BaseHTTPServer.HTTPServer 
handler = CGIHTTPServer.CGIHTTPRequestHandler 
server_address = ("", 8000) 
httpd = server(server_address, handler) 
httpd.serve_forever() 

服務器執行上用於記錄而言,每請求到屏幕上一個反向DNS查找。沒有可用的DNS服務器,因爲我在本地網絡設置中運行服務器。所以每個反向dns查找都會導致查找超時,從而延遲服務器的響應。我如何禁用DNS查找?我沒有在Python文檔中找到答案。

回答

12

您可以繼承自己的處理程序類,它不會執行DNS查找。這從http://docs.python.org/library/cgihttpserver.html#module-CGIHTTPServer開始,其中CGIHTTPRequestHandlerBaseHTTPRequestHandler的接口兼容並且BaseHTTPRequestHandler有一個方法address_string()

class MyHandler(CGIHTTPServer.CGIHTTPRequestHandler): 

    # Disable logging DNS lookups 
    def address_string(self): 
     return str(self.client_address[0]) 

handler = MyHandler 
+0

是的,這工作正常。非常直截了當。 – alex

+5

整潔。我有時會發現使用「python -m SimpleHTTPServer」快速啓動HTTP服務器很有用。 下面是一個完成相同工作但使用上述提示禁用反向DNS查詢的單線程。 (「self.client_address [0]); SimpleHTTPServer.test()」);這個函數可以用來創建一個簡單的HTTPServer.getHandler()。 –