Curl抓取HTML内容

时间:2009-12-10 14:23:32

标签: php curl

我有一个需要登录的网页。

我正在使用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

3 个答案:

答案 0 :(得分:2)

cURL没有获取图片或任何其他“内容”,它只是获取原始HTML页面。您是说您缺少原始页面上的<img />标签吗?

cURL也不解析任何CSS或JavaScript,因此如果内容被修改,那么它将无法通过。例如,您可能无法获得background-image元素,除非您执行更多抓取,即获取关联的CSS文件并解析该文件。

答案 1 :(得分:0)

我遇到的主要问题是我看不到html,所以我不能确定问题是什么。话虽如此,我发生了两件事。

要检查的第一件事是图像是否相对。如果它们以../xyz/foo.jpgfoo.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;