python 2.7简单代理服务器

时间:2016-06-26 08:05:36

标签: python python-2.7 http proxy server

我想在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' (实际的响应对象),但它没有工作

评论中的行是一个简单的重定向,甚至没有保留网站的内容

非常感谢

1 个答案:

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