我有一个需要登录的网页。
我正在使用curl来构建HTTP身份验证请求。它有效,但我无法从链接中获取所有内容。我想念所有的图像。
我如何抓取图像?
<?php
// create cURL resource
$URL = "http://10.123.22.38/nagios/nagvis/nagvis/index.php?map=Nagvis_CC";
//Initl curl
$ch = curl_init();
//Set HTTP authentication option
curl_setopt($ch, CURLOPT_URL, $URL); // Load in the destination URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Normal HTTP request, not SSL
curl_setopt($ch, CURLOPT_USERPWD, "guest:test" ); // Pass the user name and password
// grab URL and pass it to the browser
$content = curl_exec($ch);
$result = curl_getinfo($ch);
// close cURL resource, and free up system resources
curl_close($ch);
echo $content;
echo $result;
?>
我收到此警告消息Warning: curl_error(): 2 is not a valid cURL handle resource in C:\xampp\htdocs\LiveServices\LoginTest.php on line 24
答案 0 :(得分:2)
cURL没有获取图片或任何其他“内容”,它只是获取原始HTML页面。您是说您缺少原始页面上的<img />
标签吗?
cURL也不解析任何CSS或JavaScript,因此如果内容被修改,那么它将无法通过。例如,您可能无法获得background-image
元素,除非您执行更多抓取,即获取关联的CSS文件并解析该文件。
答案 1 :(得分:0)
我遇到的主要问题是我看不到html,所以我不能确定问题是什么。话虽如此,我发生了两件事。
要检查的第一件事是图像是否相对。如果它们以../xyz/foo.jpg
或foo.jpg
的形式显示,那么您需要将图像src编辑为完整网址或将base tag添加到html
要解析HTML,请使用Simple HTML DOM library,因为它比滚动自己更快。
第二个问题可能是图像还需要用户登录。如果是这种情况,您还必须下载所有图像,并在base 64编码后将其嵌入到内容中,或者存储他们暂时在你的服务器上。
答案 2 :(得分:-1)
这里有一些html代码: 我想要的图像:
<img id="backgroundImage" style="z-index: 0;" src="/nagios/nagvis/nagvis/images/maps/Nagvis_CC.png"/>
<a href="/nagios/cgi-bin/extinfo.cgi?type=2&host=business_processes&service=NLThirdPartyLive" target="_self">
还有很多javascript。
我尝试使用简单的HTML dom libray,但输出是数组。没有
require("/simplehtmldom/simple_html_dom.php");
$ ch = curl_init(); curl_setopt($ ch,CURLOPT_USERAGENT,'WhateverBrowser1.45'); curl_setopt($ ch,CURLOPT_URL,'http://10.123.22.38/nagios/nagvis/nagvis/index.php?map=Nagvis_CC'); curl_setopt($ ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ ch,CURLOPT_HTTPAUTH,CURLAUTH_BASIC); //正常的HTTP请求,而不是SSL curl_setopt($ ch,CURLOPT_USERPWD,“guest:test”); //传递用户名和密码 curl_setopt($ ch,CURLOPT_TIMEOUT,60); $ result = curl_exec($ ch);
$ html = str_get_html($ result); echo $ ret = $ html-&gt; find('table [class = header_table]');
echo $ result;