Php 从CURL获取已执行的URL

Php 从CURL获取已执行的URL,php,curl,Php,Curl,我有一个像这样的联盟网址 打开此链接将转到http://www.abc.com 现在我想执行http://track.abc.com/?affid=1234使用CURL 现在我如何获得http://www.abc.com 使用Curl?如果您想让Curl跟踪它接收到的响应的重定向头,则需要使用以下选项设置该选项: curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 您可能还希望使用以下命令限制重定向的数量: curl_setopt($ch, CURL

我有一个像这样的联盟网址 打开此链接将转到
http://www.abc.com

现在我想执行
http://track.abc.com/?affid=1234
使用CURL 现在我如何获得
http://www.abc.com

使用Curl?

如果您想让Curl跟踪它接收到的响应的重定向头,则需要使用以下选项设置该选项:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
您可能还希望使用以下命令限制重定向的数量:

curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
所以你可以使用类似的方法:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://track.abc.com/?affid=1234");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$data = curl_exec($ch);
编辑:问题不太清楚,但从下面的评论中可以看出,如果您想获得重定向位置,您需要从cURL获取标题,并解析它们作为位置标题:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://track.abc.com/?affid=1234");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, true);
$data = curl_exec($ch);

这将为您提供服务器返回的$data报头,只需对其进行解析即可获得location报头,您将得到结果。我编写了一个函数,可以从cURL头响应中提取任何头

function getHeader($headerString, $key) {
    preg_match('#\s\b' . $key . '\b:\s.*\s#', $headerString, $header);
    return substr($header[0], strlen($key) + 3, -2);
}
在本例中,您正在查找标题位置的值。我通过使用cURL从TinyURL检索头来测试该函数,TinyURL重定向到

$url = "http://tinyurl.com/dtrkv";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);

$location = getHeader($data, 'Location');
var_dump($location);
var_转储的输出

string(16) "http://google.se"

只需使用CURLOPT_FOLLOWLOCATION,curl将继续到重定向页面。此代码结果提供了的所有html代码,但我想存储在$data中