可能重复:
Making a HTTP GET request with HTTP-Basic authentication
我想获取受密码保护的页面的HTML源代码。我通常使用此代码来获取未受保护页面的html源代码。
$handle = @fopen("http://www.webmasterworld.com", "rt");
$source_code = fread($handle,9000);
如何使用用户名和密码获取受密码保护的页面的来源?密码?它不受Basic Auth保护。
答案 0 :(得分: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值的更多详细信息,请参阅similar post here。
2)获得会话cookie密钥/值对后,通过提供cookie /值对来读取页面,以便网站知道您之前已经过身份验证。设置第二个请求时,您需要将CURLOPT_COOKIE
选项与curl_setopt()
一起使用,并提供cookie = value对。有关如何通过cURL发送cookie的更多详细信息,请访问related post here。
答案 1 :(得分:1)
什么样的保护?如果是BASIC AUTH,请改用curl。如果它落后于会话变得更复杂。
答案 2 :(得分:1)
尝试对用户名和密码进行网址编码并将其添加到网址中。
$encUser = urlencode($username);
$encPass = urlencode($password);
$handle = @fopen("http://{$encUser}:{$encPass}@www.webmasterworld.com", "rt");
几乎所有通过HTTP获取文档的库都能理解URL中的基本凭据。