2013-02-05 4 views
1

내가 파이썬파이썬 간단한 웹 서버

class WebServer: 
    def __init__(self): 
     from BaseHTTPServer import HTTPServer 
     import urlparse 
     server = HTTPServer(('', 8080), self.do_GET) 
     server.serve_forever() 

    def do_GET(self): 
     parsed_path = urlparse.urlparse(self.path) 
     message_parts = [ 
       'CLIENT VALUES:', 
       'client_address=%s (%s)' % (self.client_address, self.address_string()), 
       'command=%s' % self.command, 
       'path=%s' % self.path, 
       'real path=%s' % parsed_path.path, 
       'query=%s' % parsed_path.query, 
       'request_version=%s' % self.request_version, 
       '', 
       'SERVER VALUES:', 
       'server_version=%s' % self.server_version, 
       'sys_version=%s' % self.sys_version, 
       'protocol_version=%s' % self.protocol_version, 
       '', 
       'HEADERS RECEIVED:', 
       ] 
     for name, value in sorted(self.headers.items()): 
      message_parts.append('%s=%s' % (name, value.rstrip())) 
     message_parts.append('') 
     message = '\r\n'.join(message_parts) 
     self.send_response(200) 
     self.end_headers() 
     self.wfile.write(message) 
     return 

으로는 HTTP 서버에 내장 된 사용하여 몇 가지 간단한 변수를 인쇄하려고하지만 난이 오류 얻을 수가 :

Exception happened during processing of request from ('10.0.1.3', 52251) 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/SocketServer.py", line 295, in _handle_request_noblock 
    self.process_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 321, in process_request 
    self.finish_request(request, client_address) 
    File "/usr/lib/python2.7/SocketServer.py", line 334, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
TypeError: do_GET() takes exactly 1 argument (4 given) 
---------------------------------------- 

데프 do_GET를 (자기) : 그저 자아를 더 많이받는 것 같아요. 무엇이 실종 됐나요?

+0

수행을 당신이'HandlerClass' 필요하지? – imreal

+0

이 경우 self.do_GET이 아닙니까? – HyperDevil

+1

사용중인 모듈에 대한 설명서를 살펴보십시오. 완전한 객체가 필요할 때 함수를 전달합니다. http://docs.python.org/2/library/basehttpserver.html#BaseHTTPServer. BaseHTTPRequestHandler – slezica

답변

2

상속 WebServer :

class WebServer(BaseHTTPRequestHandler): 

당신은 아마에 대한 수입을 변경해야합니다.

는 다음과 같은 HTTPServer에 인수로 전달 :

server = HTTPServer(('', 8080), WebServer) 
+0

지금 나는 __INIT__ 오류가 나타납니다 : http://pastebin.com/UubcHjSa – HyperDevil

+0

그것은 나를 위해 작동합니다 'WebServer'의 정의 뒤에'server = HTTPServer ((" ', 8080), WebServer) server.serve_forever()를 움직인다. – imreal

+1

http://pastebin.com/YEZeDSes – imreal

2

BaseHTTPRequestHandler이 필요한 경우 함수를 전달 중입니다. 즉, 파이썬은 BaseHTTPRequestHandler__init__ 메서드를 사용하여 객체를 인스턴스화하려고하지만 다른 양의 인수를 사용하는 함수를 제공했습니다.

일반 함수를 전달하는 대신 하위 예제 BaseHTTPRequestHandler. @ dm03514로 주석에 링크 된 예제가 시작됩니다. 이 같은 요청 처리기에서

관련 문제