How to switch from POST to GET in PHP CURL
Make sure that you're putting your query string at the end of your URL when doing a GET request.
$qry_str = "?x=10&y=20";$ch = curl_init();// Set query data here with the URLcurl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php' . $qry_str); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_TIMEOUT, 3);$content = trim(curl_exec($ch));curl_close($ch);print $content;
With a POST you pass the data via the CURLOPT_POSTFIELDS option insteadof passing it in the CURLOPT__URL.
$qry_str = "x=10&y=20";curl_setopt($ch, CURLOPT_URL, 'http://example.com/test.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_TIMEOUT, 3);// Set request method to POSTcurl_setopt($ch, CURLOPT_POST, 1);// Set query data here with CURLOPT_POSTFIELDScurl_setopt($ch, CURLOPT_POSTFIELDS, $qry_str);$content = trim(curl_exec($ch));curl_close($ch);print $content;
Note from the curl_setopt()
docs for CURLOPT_HTTPGET
(emphasis added):
[Set CURLOPT_HTTPGET equal to]
TRUE
to reset the HTTP request method to GET.
Since GET is the default, this is only necessary if the request method has been changed.
Solved: The problem lies here:
I set POST
via both _CUSTOMREQUEST
and _POST
and the _CUSTOMREQUEST
persisted as POST
while _POST
switched to _HTTPGET
. The Server assumed the header from _CUSTOMREQUEST
to be the right one and came back with a 411.
curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'POST');