-3

可能重复:
使用 HTTP-Basic 身份验证发出 HTTP GET 请求

我想获取受密码保护的页面的 HTML 源代码。我通常使用此代码来获取未受保护页面的 html 源代码。

$handle = @fopen("http://www.webmasterworld.com", "rt");
$source_code = fread($handle,9000);

如何使用用户名和密码获取受密码保护的页面的来源?它不受基本身份验证的保护。

4

3 回答 3

4

由于这不是 BASIC AUTH(例如,在 apache 中通过 .htaccess 保护),而是似乎基于会话/cookie,因此您需要首先提交用户名/密码,就像普通浏览器通过 POST 请求一样。成功后,Web 应用程序将向您返回一个 cookie 名称/值对,您需要将其用于下一个请求(即请求您要阅读的页面)。

您可以使用服务器希望您设置的所有 cookie 键/值对,也可以找出重要的会话 cookie 是什么。这取决于 Web 应用程序的工作方式。要弄清楚会话 cookie 名称应该是什么以及通常的值是什么样的,请尝试通过诸如 firebug 或 chrome 的开发工具之类的工具查看 HTTP 请求。一旦你弄清楚了重要的 cookie 名称/值是什么,请确保在下一个请求中尝试读取页面时发送它。

在 PHP 中完成这一切的最简单方法是使用cURL。粗略的想法有两个部分:

1) 将用户名/密码发布到表单的 action="" 处理器并返回 cookie 值对。请参阅curl_init()curl_setopt()curl_exec()了解如何初始化请求,设置其选项(例如,将其类型设置为 POST,设置浏览器代理字符串以防处理脚本仅响应真实浏览器,将请求设置为仅标头请求等)然后执行。有关如何执行此操作和获取 cookie 值的更多详细信息,请参见此处的类似帖子

2) 获得会话 cookie 键/值对后,通过提供 cookie/值对来读取页面,以便网站知道您之前已通过身份验证。在设置第二个请求并提供 cookie=value 对时,您需要使用CURLOPT_COOKIE选项 with 。curl_setopt()有关如何通过 cURL 发送 cookie 的更多详细信息,请参见此处的相关帖子

于 2012-11-20T01:17:10.957 回答
1

尝试对用户名和密码进行 url 编码并将它们添加到 URL。

$encUser = urlencode($username);
$encPass = urlencode($password);
$handle = @fopen("http://{$encUser}:{$encPass}@www.webmasterworld.com", "rt");

几乎任何将通过 HTTP 为您获取文档的库都了解 URL 中的基本凭据。

于 2012-11-20T00:53:47.973 回答
1

什么样的保护?如果是 BASIC AUTH,请改用 curl。如果它落后于会话会变得更加复杂。

于 2012-11-20T00:34:55.853 回答