Как перенаправить запрос на другой URL-адрес в python

Я искал синтаксис для перенаправления специального URL-адреса на удаленный сервер, чтобы выполнить некоторое тестирование XSS. Любые идеи?

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

Ответы

Ответ 1

Для перенаправления вы должны вернуть код 301, плюс заголовок Location. Возможно, вы можете попробовать что-то вроде:

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

Ответ 2

Это полный фрагмент кода для перенаправления, сохраните этот файл и запустите его как программу python. для завершения, 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()

Ответ 3

Код 301 статуса HTTP имеет смысл запроса, который перемещается на постоянной основе и должен быть перенаправлен на предлагаемый URI, который установлен в поле заголовка ответа, местоположение. Однако перенаправление происходит в зависимости от реализации браузеров.

Вместо 301, возвращающий 303 указывает браузеру, ответ на запрос может быть найден под другим URI и эффективно управляет браузером для перенаправления запроса GET на другой URI. Hense, 303 - лучший вариант.

Ответ 4

Python 3

В python3 он очень похож на другие ответы, но достаточно разный, чтобы оправдать демонстрацию.

Это script, который ничего не делает, кроме как прослушивать порт, переданный как аргумент 1, и отправлять 302 ("Найденный) aka Temporary) перенаправление на URL-адрес, переданный как аргумент 2. (И у него есть сообщение об использовании.)

#!/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()

Вы называете это:

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

Этот пример должен дать вам достаточно, чтобы написать то, что вам нужно.