2010-03-24 17 views
17

He estado buscando la sintaxis para redirigir una url especial a un servidor remoto para hacer algunas pruebas XSS. ¿Algunas ideas?Cómo reenviar una solicitud a una url diferente en python

import SimpleHTTPServer 
import SocketServer 

class myHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self): 
     print self.path 
     if self.path == '/analog': 
-------------------->return "http://12b.dk/analog"??? 
     return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) 

theport = 1234 
Handler = myHandler 
pywebserver = SocketServer.TCPServer(("", theport), Handler) 

print "Python based web server. Serving at port", theport 
pywebserver.serve_forever() 

Respuesta

16

Para una redirección, tiene que devolver un código 301, más una cabecera Location. Probablemente usted puede intentar algo como:

class myHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self): 
     self.send_response(301) 
     self.send_header('Location','http://www.example.com') 
     self.end_headers() 
6

Se trata de una pieza completa de código para redirigir, guardar este archivo y ejecutarlo como un programa de pitón. para terminar, ctrl + c.

import SimpleHTTPServer 
import SocketServer 
class myHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): 
    def do_GET(self): 
     print self.path 
     self.send_response(301) 
     new_path = '%s%s'%('http://newserver.com', self.path) 
     self.send_header('Location', new_path) 
     self.end_headers() 

PORT = 8000 
handler = SocketServer.TCPServer(("", PORT), myHandler) 
print "serving at port 8000" 
handler.serve_forever() 
1

código de estado HTTP 301 tiene un sentido de la solicitud se trasladó de forma permanente y debe ser redirigido a URI sugerido que se establece en el campo cabecera de respuesta, la ubicación. Sin embargo, la redirección ocurre dependiendo de la implementación de los navegadores.

En lugar de 301, al devolver 303 le dice al navegador que la respuesta a la solicitud se puede encontrar en otro URI y administra efectivamente el navegador para redirigir la solicitud GET a otro URI. Hense, 303 es una mejor opción.

0

Python 3

En python3 que se hace muy similar a otras respuestas, pero lo suficientemente diferentes como para justificar demostración.

Este es un script que no hace más que escuchar en el puerto pasa como argumento y enviar un 302 ("Encontrado" alias temporal) redirigir a la URL se pasa como argumento . (Y tiene un mensaje de uso.)

#!/usr/bin/env python3 

import sys 
from http.server import HTTPServer, BaseHTTPRequestHandler 

if len(sys.argv)-1 != 2: 
    print(""" 
Usage: {} <port_number> <url> 
    """.format(sys.argv[0])) 
    sys.exit() 

class Redirect(BaseHTTPRequestHandler): 
    def do_GET(self): 
     self.send_response(302) 
     self.send_header('Location', sys.argv[2]) 
     self.end_headers() 

HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever() 

puedes llamar así:

sudo ./redirect.py 80 http://jenkins.example.com:8080/ 

Ese ejemplo debe darle suficiente como para escribir lo que cada vez tipo de función que necesita.

Cuestiones relacionadas