formularios enviar python url redirect simplehttpserver

enviar - formularios web python



¿Cómo reenvío una solicitud a una URL diferente en Python? (5)

Python 3

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

Este es un script que no hace más que escuchar en el puerto pasado como argumento 1 y enviar un redireccionamiento 302 ("Encontrado", también llamado Temporal) a la URL pasada como argumento 2 . (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()

Lo llamas como

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

Ese ejemplo debería proporcionarle lo suficiente para escribir cualquier tipo de función que necesite.

He estado buscando la sintaxis para redirigir una URL especial a un servidor remoto para realizar algunas pruebas de XSS. ¿Algunas ideas?

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()


El código de estado HTTP 301 tiene el significado de que la solicitud se movió permanentemente y se debe redirigir a la URI sugerida, que se establece en el campo del encabezado de respuesta, ubicación. Sin embargo, la redirección ocurre dependiendo de la implementación de los navegadores.

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


Este es un fragmento completo de código para redirigir, guardar este archivo y ejecutarlo como un programa de Python. 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()


Para una redirección, debe devolver un código 301, más un encabezado de Location . Probablemente puedas probar 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()


Si está intentando redirigir otros tipos de solicitudes (por ejemplo, POST), es posible que deba usar el código de estado 307 lugar de 301 .

  • 301 se redireccionará con una solicitud GET incluso si envió una solicitud POST
  • 307 utilizará el mismo método que usó para la solicitud inicial

Código de ejemplo que redirige las solicitudes GET y POST:

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

Nota : el uso del código de estado 307 es potencialmente peligroso , por lo que no se recomienda usar este código de estado para todas las solicitudes entrantes. Idealmente, desearía restringir su uso solo para solicitudes que sepa que son seguras .