2012-02-22 16 views
5

Sto usando uno script python per fare il mio webserver usando il modulo BaseHTTPServer. ciOttenere l'indirizzo IP da HTTP Richiesta 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() 

è comunque di ottenere l'indirizzo IP di una richiesta POST quando il mio server riceve: Di seguito è riportato il mio codice per il server? Molte grazie in anticipo.

risposta

5

Dovresti essere in grado di ottenere il loro indirizzo IP con self.client_address[0].

+0

Quando faccio 'self.client_address' di stampa, mi dà un indirizzo IP e un numero. È il numero della porta? – androidnoob

+0

@androidnoob: Sì, il secondo numero è la porta del client. Se si desidera solo l'indirizzo IP, virare '[0]' alla fine. – icktoofay

+0

Vedo. Grazie mille per la tua pronta risposta! Non posso ringraziarti abbastanza per questo! – androidnoob

0

Per coloro che non utilizzano biblioteca BaseHTTPServer self.request.remote_addr funziona bene

+0

Che non funzionerà correttamente se python proxy utilizzando alcuni servizi Web, poiché l'IP punterà al proxy in modo che l'intestazione debba essere inoltrata come 'X-Forwarded-For' – moka

Problemi correlati