CURL Get Request with a parameter that contains a GET url

Maxim Laco picture Maxim Laco · Sep 15, 2015 · Viewed 46.5k times · Source

I'm trying to make a cURL GET to scrape a Facebook Graph object:

GET https://graph.facebook.com/?id=**OBJECT_URL**&scrape=true&method=post

In my case, OBJECT_URL contains GET parameters:

https://www.example.com/og.php?a=b&c=d

For that reason I can't have it as a GET parameter in file_get_contents() or CURLOPT_URL, as it'd turn out something like this:

https://graph.facebook.com/?id=**https://www.example.com/og.php?a=b&c=d**&scrape=true&method=post

Is there a way to pass it as a GET parameter in a way similar to CURLOPT_POSTFIELDS?

Answer

Andrzej Budzanowski picture Andrzej Budzanowski · Sep 16, 2015

You need to escape your parameters, the http_build_query function will be useful:

$query = http_build_query([
 'id' => 'http://foo?a=1&b=2',
 'scrape' => true,
 'method' => 'post'
]);

$url = "https://graph.facebook.com/?".$query;

var_dump($url);

This will output:

https://graph.facebook.com/?id=http%3A%2F%2Ffoo%3Fa%3D1%26b%3D2&scrape=1&method=post