Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP读取受保护页面的HTML源代码_Php_Download_Session Cookies - Fatal编程技术网

PHP读取受保护页面的HTML源代码

PHP读取受保护页面的HTML源代码,php,download,session-cookies,Php,Download,Session Cookies,可能重复: 我想得到一个密码保护页面的HTML源代码。我通常使用此代码获取未受保护页面的html源代码 $handle = @fopen("http://www.webmasterworld.com", "rt"); $source_code = fread($handle,9000); 如何使用用户名和密码获取受密码保护的页面的源?它不受基本身份的保护。什么样的保护?如果是基本身份验证,则使用curl。如果它在一个会话后面,会变得更复杂 尝试url编码用户名和密码并将其添加到url中 $e

可能重复:

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

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

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

什么样的保护?如果是基本身份验证,则使用curl。如果它在一个会话后面,会变得更复杂

尝试url编码用户名和密码并将其添加到url中

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

几乎所有通过HTTP为您获取文档的库都能理解URL中的基本凭据。

因为这不是一个基本身份验证,例如apache中的.htaccess保护的身份验证,而是基于会话/cookie的身份验证,所以您需要先提交用户名/密码,就像普通浏览器通过POST请求提交用户名/密码一样。成功后,web应用程序将向您返回一个cookie名称/值对,您将需要使用该对进行下一次请求,即请求您要阅读的页面

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

在PHP中实现这一切的最简单方法是使用。大致思路分为两部分:

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


2获得会话cookie密钥/值对后,通过提供cookie/值对来阅读页面,以便网站知道您之前已通过身份验证。在设置第二个请求并提供COOKIE=value对时,您需要将CURLOPT\u COOKIE选项与curl\u setopt一起使用。有关如何通过cURL发送cookie的更多详细信息,请访问

什么样的密码保护。htpasswd?编号。受asp保护。查看我对第一个答案的评论我不明白你的意思,但我想阅读此页以登录此页,我需要输入用户名和密码,这一点比较难。您必须使用CURL模拟登录,登录后获取会话id cookie,下载页面时传递它。可能有一些库可以做到这一点,所以做一些搜索。不过,如果你与网站所有者进行了沟通,最好的办法是首先与他们讨论以不同的方式提供信息,因为上述方式并不是传递信息的最优雅方式。看一看这个,去掉命令中的“@”,告诉我们您遇到了什么错误。我正在使用这段代码,它显示警告:fread希望参数1是资源,第5行C:\wamp\www\read\index.php中给出的布尔值您忘记了凭据和URL主机名之间的“@”。我试过了,但您告诉我取消它。当我使用@时,它说不能登录我的意思是从@fopen中删除@。使用带有@符号的正确URL时会出现什么错误?