如何编写简单的PHP透明代理?

时间:2009-07-07 08:27:47

标签: php proxy curl libcurl

我需要创建一个可以访问隐藏在登录屏幕后面的页面的代理脚本。我不需要代理来“模拟”登录,而是登录页面HTML应该正常显示给用户,并且所有cookie和HTTP GET / POST数据都要通过代理流到服务器,所以登录应该是可信的。

我不想登录/密码,我只需要在登录后访问生成的页面的HTML源代码。

这里有人知道如何实现这一目标吗?这很容易吗?

如果没有,我从哪里开始?*(我目前正在使用PHP)*

4 个答案:

答案 0 :(得分:3)

让您的PHP脚本请求您想要的URL,并重写所有链接和表单操作以指回您的PHP脚本。当接收到具有URL参数的脚本的请求时,将其转发到远程服务器并重复。

您将无法捕获所有JavaScript请求,(除非您实现了“代理”的JavaScript部分)

例如:用户在您的代理表单中键入http://example.com/login.php

将用户发送到http://yoursite.com/proxy.php?url=http://example.com/login.php

确保对参数“http://example.com/login.php

进行urlencode

http://yoursite.com/proxy.php中,您向http://example.com/login.php

发出HTTP请求
$url = $_REQUEST['url'];

// make sure we have a valid URL and not file path
if (!preg_match("`https?\://`i", $url)) {
    die('Not a URL');
}

// make the HTTP request to the requested URL
$content = file_get_contents($url);

// parse all links and forms actions and redirect back to this script
$content = preg_replace("/some-smart-regex-here/i", "$1 or $2 smart replaces", $content);

echo $content;

请注意, / some-smart-regex-here / i 实际上是一个应该写入解析链接的正则表达式,等等。

该示例仅代理HTTP Body,您可能希望代理HTTP标头。您可以在PHP5 +中使用fsockopen()或PHP流函数(stream_socket_client()等。)

答案 1 :(得分:2)

你可以查看http://code.google.com/p/php-transparent-proxy/,我之所以这样做,是因为我问自己完全相同的问题,我决定制作一个。它是BSD许可证,所以玩得开心:)

答案 2 :(得分:1)

您所谈论的是访问您需要自己验证身份的网页。

以下是必须制定的一些事项:

  • 如果不对自己进行身份验证,则无法查看这些页面。
  • 如果网站(您想要查看其HTML代码)仅支持Web登录作为身份验证方法,则需要通过POST / GET发送(用户名,密码)来模拟登录,视情况而定
  • 如果网站允许您以其他方式(例如LDAP,Kerberos等)对您进行身份验证,那么您应该这样做

关键是,如果不首先验证自己,就无法获得访问权限。

至于语言,它在PHP中非常可行。正如问题上的标签所示,您正在使用正确的工具来完成这项工作。

我想知道的一件事是,你为什么称它为“代理人”?你想将内容提供给其他用户吗?

编辑: [评论后更新]

在这种情况下,请使用phproxy。它可以满足您的需求,还有许多其他功能。

答案 3 :(得分:0)

我建议使用Curl(您可能需要在php.ini中激活的php库) 它用于操纵远程网站,处理cookie和您需要的每个http参数。 你必须根据你正在打的网页编写你的代理,但它会成功。