我正在尝试解析包含一些链接的页面。如果遵循这些链接,将重定向到某些文件进行下载。
例如,<a href="http://example.com/file.php"> Download </a>
重定向到<a href="http://example.com/1.pdf"
。
我不想下载文件,我只想获取文件链接(在本例中为http://example.com/1.pdf
)。
我正在尝试这个:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE); // Return in string
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
var_dump(curl_getinfo($ch));
但是,它给了我文件内容。
有没有人知道如何做到这一点?
== EDIT ==
感谢你们。我这样解决了:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
curl_exec($ch);
$info = curl_getinfo($ch);
现在,$info
包含标题,我可以从中获取链接。
答案 0 :(得分:1)
将输出发送到屏幕的原因是因为您要告诉cURL这样做。如果要将响应存储在变量中,请执行以下行:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
应为:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
然后,实际上从curl_exec
检索返回的输出,如下所示:
$output = curl_exec($ch);
从$output
变量中的远程页面获取返回的HTML内容后,您可以使用DOMdocs或正则表达式(但最好是DOM )来解析您的任何信息想。
<强>更新强>
我无法说明,因为问题含糊不清:实际上是否有位置标题重定向?如果是这样,你就会像@heiko建议那样阻止cURL跟踪重定向并检索标题。然后,您可以轻松地解析位置标题的内容:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLINFO_HEADER, TRUE); // add header output
答案 1 :(得分:1)
# make sure to not follow Location: Header
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
# add Response Header to Output, so that you can find the Location-Header in there!
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
答案 2 :(得分:1)
如果您想在页面上显示HTML源代码,请使用RETURN TRANSFER as 1
,也可以使用htmlentities()
,否则只需echo
变量(显示页面[重定向到Google])。< / p>
<?php
$url = "http://www.google.co.in";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return in string
curl_setopt($ch, CURLOPT_URL, $url);
$varx = curl_exec($ch);
echo htmlentities($varx);
?>
使用$varx
变量,使用正则表达式来匹配您想要的数据。