2011-04-01 160 views
3

我建立一个网站爬虫,并使用这些选项cURL class为获得头,这样我就可以下载完整的网站非常它text/html和低于指定大小之前提取其mime/typecontent-length限制。curl_getinfo返回-1为内容长度

这些都是我的卷曲选项

$c->setopt(CURLOPT_URL, $theURL); 
$c->setopt(CURLOPT_HEADER, false); 
$c->setopt(CURLOPT_RETURNTRANSFER, true); 
$c->setopt(CURLOPT_TIMEOUT, 10); 
$c->setopt(CURLOPT_CONNECTTIMEOUT, 10); 
$c->setopt(CURLOPT_NOBODY, TRUE); 
$c->setopt(CURLOPT_FOLLOWLOCATION, TRUE); 
$c->setopt(CURLOPT_MAXREDIRS, 2); 

// Within Class 
$theReturnValue = curl_exec($this->m_handle); 
$this->m_status = curl_getinfo($this->m_handle) ; 

,但它总是返回[download_content_length] => -1即使没有CURLOPT_NOBODY然而retrived数据(整个文件)是正确的。

+0

也许服务器ISN”发送“内容长度”标题? – drudge 2011-04-01 20:22:07

+0

对不起,没有足够的信息(我已经编辑了问题)..但是,这似乎确实如此,当我想检索html页面时应该怎么做? – Shishant 2011-04-01 20:28:18

回答

4

CURLINFO_CONTENT_LENGTH_DOWNLOAD的libcurl的文档(这是PHP使用绑定的)说:

“这个返回-1如果大小是不知道”

+0

有没有办法强制获取大小,而不是先下载它? – Shishant 2011-04-01 20:38:55

+4

不可以。您不能强制服务器返回“Content-Length”标头。动态生成的页面通常会忽略此标题,因为标题通常在页面甚至完全呈现在服务器端之前发送 - 在发送标题时,甚至服务器都不知道页面的大小。 – 2011-04-01 20:56:41