我想在python中创建一个简单的代理服务器 这是它需要做的: - 从客户端获取网址 - 获取该网址的内容 - 操纵该站点中的每个链接 - 将操纵的网站返回给用户
我到目前为止唯一设法做的事情(使用urllib或者请求)是所需网址的简单重定向 意思是我甚至无法向用户返回我持有的响应对象
关于如何做到的任何想法?
我到目前为止的代码:
import BaseHTTPServer
import requests
from urlparse import urlparse
import HTTPClient
PORT = 443
class Proxy(BaseHTTPServer.BaseHTTPRequestHandler):
def do_HEAD(self):
query = urlparse(self.path).query
query_components = dict(qc.split("=") for qc in query.split("?"))
new_url = query_components['url']
r = requests.get(url, stream=True)
self.send_response(301)
#self.send_header('Location', new_url)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(r.content)
def do_GET(self):
query = urlparse(self.path).query
query_components = dict(qc.split("=") for qc in query.split("?"))
if query_components['url'].find('http://') != 0:
self.send_error(400, "Bad Url - Http Required")
else:
self.do_HEAD()
try:
httpd = BaseHTTPServer.HTTPServer(('localhost', PORT), Proxy)
print "Serving at port", PORT
httpd.serve_forever()
except KeyboardInterrupt:
httpd.server_close()
print "Closing Server"
我甚至试图以某种方式回归' r' (实际的响应对象),但它没有工作
评论中的行是一个简单的重定向,甚至没有保留网站的内容
非常感谢
答案 0 :(得分:0)
这应该适用于linux,希望它能给你一个起点。
import SocketServer
import SimpleHTTPServer
import urllib
PORT = 1234
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.copyfile(urllib.urlopen(self.path), self.wfile)
httpd = SocketServer.ForkingTCPServer(('', PORT), Proxy)
print "serving at port", PORT
httpd.serve_forever()