我有一个类似http://track.abc.com/?affid=1234的会员网址
打开此链接将转到http://www.abc.com
现在我想执行http://track.abc.com/?affid=1234
使用CURL
现在我如何获得http://www.abc.com
与卷曲?
答案 0 :(得分:1)
如果您希望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获取标头并解析它们以获取Location标头:< / p>
$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中返回的标头,只需解析它们以获取位置标头,您就可以获得结果。 This question向您展示了如何做到这一点。
答案 1 :(得分:-1)
我编写了一个函数,它将从cURL标头响应中提取任何标头。
function getHeader($headerString, $key) {
preg_match('#\s\b' . $key . '\b:\s.*\s#', $headerString, $header);
return substr($header[0], strlen($key) + 3, -2);
}
在这种情况下,您正在查找标题位置的值。我通过从TinyURL检索标头来测试该功能,使用cURL重定向到http://google.se。
$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_dump的输出。
string(16) "http://google.se"