Manoj Kumar
Manoj Kumar

Reputation: 1

Getting executed URL from CURL

I have a Affiliate URL Like http://track.abc.com/?affid=1234 open this link will go to http://www.abc.com

now i want to execute the http://track.abc.com/?affid=1234 Using CURL and now how i can Get http://www.abc.com with Curl ?

Upvotes: 0

Views: 8374

Answers (2)

Niklas Ekman
Niklas Ekman

Reputation: 960

I wrote a function that will extract any header from a cURL header response.

function getHeader($headerString, $key) {
    preg_match('#\s\b' . $key . '\b:\s.*\s#', $headerString, $header);
    return substr($header[0], strlen($key) + 3, -2);
}

In this case, you're looking for the value of the header Location. I tested the function by retrieving headers from a TinyURL, that redirects to http://google.se, using cURL.

$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);

Output from the var_dump.

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

Upvotes: -1

shannonman
shannonman

Reputation: 861

If you want cURL to follow redirect headers from the responses it receives, you need to set that option with:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

You may also want to limit the number of redirects it follows using:

curl_setopt($ch, CURLOPT_MAXREDIRS, 3);

So you'd using something similar to this:

$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);

Edit: Question wasn't exactly clear but from the comment below, if you want to get the redirect location, you need to get the headers from cURL and parse them for the Location header:

$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);

This will give you the headers returned by the server in $data, simply parse through them to get the location header and you'll get your result. This question shows you how to do that.

Upvotes: 2

Related Questions