![](/img/trans.png)
[英]How do i redirect (navigate) to new url with Selenium Python
[英]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()
在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
。
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.