4

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

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

这里有人知道如何实现吗?这简单吗?

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

4

4 回答 4

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 正文,您可能希望代理 HTTP 标头。您可以在 PHP5+ 中使用 fsockopen() 或 PHP 流函数(stream_socket_client() 等)

于 2009-07-07T10:21:20.570 回答
2

你可以查看http://code.google.com/p/php-transparent-proxy/,我做到了,因为我问自己同样的问题,我决定做一个。它在 BSD 许可下,所以玩得开心:)

于 2011-09-30T20:10:19.863 回答
1

您正在谈论的是访问您需要对其进行身份验证的页面。

这里有几件事是必须要规定的:

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

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

至于语言,它在 PHP 中是相当可行的。正如问题上的标签所暗示的那样,您已经在使用正确的工具来完成这项工作。

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

编辑: [评论后更新]

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

于 2009-07-07T09:07:58.910 回答
0

我建议使用 Curl(您可能需要在 php.ini 中激活的 php 库)它用于操作远程网站、处理 cookie 和您需要的每个 http 参数。您必须根据您访问的网页编写代理,但它会完成这项工作。

于 2009-07-07T09:09:10.170 回答