簡體   English   中英

如何在 python 中將請求重定向到不同的 url

[英]How do I redirect a request to a different url in 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()

對於重定向,您必須返回代碼 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()

蟒蛇 3

python3它與其他答案非常相似,但差異足以證明演示是正確的。

這是一個腳本,它只監聽作為參數 1傳遞的端口,並將 302(“Found”又名臨時)重定向到作為參數 2傳遞的 URL。 (它有一個使用信息。)

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

該示例應該足以讓您編寫所需的任何類型的函數。

這是一段完整的代碼,用於重定向、保存此文件並將其作為 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()

如果您嘗試重定向其他類型的請求(例如 POST),您可能需要使用狀態代碼307而不是301

  • 即使您發送了 POST 請求, 301也會使用 GET 請求重定向
  • 307將使用您用於初始請求的相同方法

重定向 GET 和 POST 請求的示例代碼:

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

注意:使用狀態代碼307 可能不安全,因此不建議對所有傳入請求使用此狀態代碼。 理想情況下,您希望僅針對您知道安全的請求限制其使用。

HTTP 狀態代碼 301 具有永久移動請求的含義,應重定向到建議的 URI,該 URI 設置為響應標頭字段、位置。 但是,重定向的發生取決於瀏覽器的實現。

返回 303 而不是 301,返回 303 告訴瀏覽器可以在其他 URI 下找到請求的響應,並有效地管理瀏覽器將 GET 請求重定向到另一個 URI。 Hense,303是更好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM