How to switch from POST to GET in PHP CURL How to switch from POST to GET in PHP CURL php php

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.


Add this before calling curl_exec($curl_handle)

curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, 'GET');


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