2012-02-22 15 views
5

Estoy usando una secuencia de comandos python para hacer mi servidor web usando el módulo BaseHTTPServer. noObteniendo la dirección IP de la solicitud HTTP POST usando Python

import string,cgi,time 
from os import curdir, sep 
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer 
#import pri 

class MyHandler(BaseHTTPRequestHandler): 

    def do_GET(self): 
     try: 
     if self.path.endswith("/"): 
     f = open(curdir + sep + "index.html") 
     self.send_response(200) 
     self.send_header('Content-type', 'text/html') 
     self.end_headers() 
     self.wfile.write("<HTML> GET OK.<BR>") 
     f.close() 
     return 

      return 

     except IOError: 
      self.send_error(404,'File Not Found: %s' % self.path) 


    def do_POST(self): 
     global rootnode 
     try: 
      ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) 
      if ctype == 'multipart/form-data': 
       query=cgi.parse_multipart(self.rfile, pdict) 
      self.send_response(200) 
      self.send_header('Content-type', 'text/html') 
     self.end_headers() 
     file = query.get('file') 
     self.wfile.write("<HTML> POST OK.<BR>") 
     f = open("data.zip", "wb") 
      f.write(file[0]) 
      f.close() 
      print("File received.") 
     return 

     except : 
      pass 

def main(): 
    try: 
     server = HTTPServer(('', 8080), MyHandler) 
     print 'started httpserver...' 
     server.serve_forever() 
    except KeyboardInterrupt: 
     print '^C received, shutting down server' 
     server.socket.close() 

if __name__ == '__main__': 
    main() 

de todos modos para obtener la dirección IP de una solicitud POST cuando mi servidor lo recibe: A continuación se muestra el código para el servidor? Muchas gracias de antemano.

Respuesta

5

Debería poder obtener su dirección IP con self.client_address[0].

+0

Cuando hago 'self.client_address' de impresión, me da una dirección IP y un número. ¿Ese es el número de puerto? – androidnoob

+0

@androidnoob: Sí, el segundo número es el puerto del cliente. Si solo desea la dirección IP, inserte '[0]' en el extremo. – icktoofay

+0

Ya veo. ¡Muchas gracias por su pronta respuesta! ¡No puedo agradecerle lo suficiente! – androidnoob

0

Para aquellos que no utilizan la biblioteca BaseHTTPServer self.request.remote_addr funciona bien

+0

Eso no funcionará correctamente si python realiza un proxy utilizando algunos servicios web, ya que la IP apunta al proxy, por lo que el encabezado debe reenviarse como 'X-Forwarded-For' – moka

Cuestiones relacionadas