自己搭建了一个WebProxy

  介于最近GFW活动越来越频繁,早先打开的Google News刚点一个链接就访问不了,脱机回退之后才发现原来上面出现了一则引述台湾媒体的新闻…… 实在是佩服GFW的处理效率啊! 考虑到新近购入的DreamHost虚拟主机流量基本还未利用起来,于是决定搭建一个WebProxy,至少还可以访问一下Google Cache、Wikipedia吧。

  (注意:因为自己搭建的WebProxy流量是算在你的虚拟主机IP上的,所以请不要随意用它访问GFW所不欢迎的网页,免得届时不仅自己的网站遭殃,还可能牵扯到不少同主机的国内用户。所以,请慎之!)在选择相应的服务器软件时,倒是费了不少周折,先后尝试了多款开源的php版的WebProxy,效果都不理想。它们大多不能很好的处理隐式的链接,若遇上Ajax就更是一塌糊涂,不仅如此,还常常在引用script、CSS等环节上出问题。毕竟,这些开源的小项目都很少能有复杂的分析引擎。

无意中,我发现了一款比较另类的软件——PHP Proxy(注意哦,此PHP Proxy非彼PHP Proxy,找到前者还真花了我不少功夫),它完全采取了与目前的WebProxy所不同的机理:服务器端(php)+客户端(Python)。安装好服务器上的php程序(仅一个文件)后,在自己的客户端启动一个Python小程序后就创建了一个本地的中转代理。只需在IE中设置代理为localhost及已配置的端口,即与使用普通HTTP Proxy全无差别了。(或许应该称其之为Web HTTP Proxy吧)

绕开了WebProxy一般所必须面对的地址转换处理后,则所有的问题都不复存在了。试用了一阵子,完全和普通HTTP一样的稳定和方便,而且访问很多外国网站的速度都有明显提升。(嘿嘿,就我一个人使用的Proxy当然快了^_^) 注:因为前面提到的原因及带宽方面的因素,很抱歉这个WebProxy不能对大家开放试用。

附:PHP Proxy(由于作者的主页已经无法访问,所以在本地放了一份供大家下载)。

《自己搭建了一个WebProxy》有27个想法

  1. Thanks for your advice!

    It seems that CGIProxy is much more advanced in url correction.

    But for some private reason, I prefer the “transparent tunnel”, you know it. 😉

  2. 站长,可否为我解释下本地需要什么配置?py文件需要什么特殊的平台来运行么?我照着readme配置了那个conf文件,但还是连不上,服务器上只需要那个php文件就行了吧?

    1. phproxy是不错的但是我放到本地服务器之后怎么不能登录
      网站上的帐号阿 例如gmail就登录不上,提示cookie没有
      打开 配置是没错的 我现在想是不是phproxy的php版本老
      造成的希望指教以下。。。

  3. 站长,可否为我解释下本地需要什么配置?py文件需要什么特殊的平台来运行么?我照着readme配置了那个conf文件,但还是连不上,服务器上只需要那个php文件就行了吧?

    我在dreamhost上试了很久都没成功。换了别的空间马上就可以了,不知道为什么。

  4. DreamHost上部署时需要注意PHP版本问题,我是在PHP4下运行的,PHP5没测试过,不排除缺少部分运行库的可能。

    本地的配置既可放在phpproxy.py.conf中,也可以直接修改phpproxy.py。以下是我的配置文件,仅供参考(将phpproxy一行替换为你的服务器端php文件地址):

    localhost = ‘127.0.0.1’
    localport = 8080
    phpproxy = ‘http://www.oasisfeng.com:80/phpproxy.php’
    proxy = None
    useragent = ‘PHPProxy; -1bit; Python/PHP’

  5. 又来烦你了,站长,呵呵
    在客户端phpproxy.py.exe界面显示:
    proxy server ready..
    —————————————————-
    Exception happened during processing of request from
    Traceback :
    File “SocketServer.pyc”, line 463, in process_request_thread
    File “SocketServer.pyc”, line 254, in finish_request
    File “SocketServer.pyc”, line 521, in __init__
    File “phpproxy.py”, line 74, in handle
    File “phpproxy.py”, line 100, in send_req
    File “socket.pyc”, line 256, in write
    File “socket.pyc”, line 243, in flush
    error:
    —————————————————–
    但是浏览网页正常,不知道为什么?
    对了,我一共在同一目录放了phpproxy.py,phpproxy.py.conf,phpproxy.py.exe,python24.dll,library.zip
    phpproxy.php放在空间上。是不是少了什么或者多了什么?

  6. 咦,大小于号都没有了,我改一下
    —————————————————-
    Exception happened during processing of request from 《’027.0.0.1′, 4182》
    Traceback 《most recent call last》:
    File “SocketServer.pyc”, line 463, in process_request_thread
    File “SocketServer.pyc”, line 254, in finish_request
    File “SocketServer.pyc”, line 521, in __init__
    File “phpproxy.py”, line 74, in handle
    File “phpproxy.py”, line 100, in send_req
    File “socket.pyc”, line 256, in write
    File “socket.pyc”, line 243, in flush
    error: 《10054, ‘Connection reset by peer’》
    —————————————————–

  7. 这个没有什么影响的,提示的意思是本地(浏览器)断开了socket连接。浏览器如果停止加载网页或者超时都会断开连接的,这是正常现象,不用担心。:)

  8. 关于:自己搭建了一个WebProxy
    请问:

    1)目前是否还在使用这种PHPproxy?
    2)现在还能否提供此份软件?能发邮件非常感谢.
    3)能否请教配置的问题?

  9. 我試了2個空間還是一樣問題,真不知發生什麼問題 一用這proxy老在google主頁

    proxy server ready..
    —————————————-
    Exception happened during processing of request from (‘127.0.0.1’, 2138)
    Traceback (most recent call last):
    File “C:Python25libSocketServer.py”, line 464, in process_request_thread
    self.finish_request(request, client_address)
    File “C:Python25libSocketServer.py”, line 254, in finish_request
    self.RequestHandlerClass(request, client_address, self)
    File “C:Python25libSocketServer.py”, line 522, in __init__
    self.handle()
    File “C:Documents and SettingsAdministrator桌面phpproxy-0.6phpproxy.py”,
    line 74, in handle
    self.send_req(req)
    File “C:Documents and SettingsAdministrator桌面phpproxy-0.6phpproxy.py”,
    line 100, in send_req
    self.wfile.write(c)
    File “C:Python25libsocket.py”, line 262, in write
    self.flush()
    File “C:Python25libsocket.py”, line 249, in flush
    self._sock.sendall(buffer)
    error: (10053, ‘Software caused connection abort’)
    —————————————-

    1. GAE下的proxy都还有不少局限性,例如post容量限制,连接时长限制。
      另外,基于URL翻译的proxy在复杂脚本环境中都很难正常工作,我尝试过gappproxy,这个效果相对好一些。

  10. 可能我没有表述清楚
    我的VPS支持SSL,并且配置好了,在py的config里面,我设置的是https去访问那个php。
    这种情况下,访问普通的http页面没有问题。
    但是访问Https的时候,就不行了

  11. 这个东东不支持 Https 的~~
    顶多链接proxy 的时候用 https ,要用https 登录的地址,都不支持~~
    作者的文档里面写得很清楚~唉

  12. 要去翻墙的网站都是被阻止的,否则翻墙干啥?既然这样还搭建webproxy 然后说不要去访问,这无法理解。

    总之,国家一品大员GFW因为在网上发现不利自己的东西而禁止互联网信息,这一点上肯定是不得民心的错误决定。

发表评论

电子邮件地址不会被公开。 必填项已用*标注