Hello all,
I was trying to convert a plugin that uses the graphapi through curl call to be compatible with cloud v13.
Therefor I converted all curl call with recommended ExternalApiCalls but post calls are not working.
I converted the following code
$curl = curl_init();
$default_options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
);
curl_setopt_array($curl, $default_options);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
if (count($curl_header) > 0) {
curl_setopt($curl, CURLOPT_HTTPHEADER, $curl_header);
}
if (is_array($curl_query_params) && count($curl_query_params) > 0) {
$url .= '?' . http_build_query($curl_query_params);
}
if ($method == "GET") {
if (is_array($params) && count($params) > 0) {
$url .= '?' . http_build_query($params);
}
} elseif ($method == "POST") {
curl_setopt($curl, CURLOPT_POST, true);
if (is_string($params)) {
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
} else {
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
}
} elseif ($method == "PUT") {
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
} elseif ($method == "DELETE") {
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params));
}
curl_setopt($curl, CURLOPT_URL, $url);
$curl_response = curl_exec($curl);
curl_close($curl);
$json_decoded = json_decode($curl_response, true);
return $json_decoded;
to the following code
$erc = new ExternalResourceClient(60, 10);
$body = null;
if ($method == "GET") {
if (is_array($params) && count($params) > 0) {
$url .= '?' . http_build_query($params);
}
} else {
if (is_string($params)) {
$body = $params;
} else {
$body = json_encode($params);
}
}
$response = $erc->request($method, $url, $body, $headers);
$rContent = $response->getBody()->getContents();
$json_decoded = json_decode($rContent, true);
return $json_decoded;
Then I try some calls, all "GET" calls are working and returning the expected data, but "POST" calls are returning the content of the "https://developer.microsoft.com/en-us/graph" web page.
I first thought that it might be linked to the IP resolution that is returning "ags.privatelink.msidentity.com." instead of an IP V4, but after modifying core to remove the IP resolution, I still have the same result.
So it seems linked to the file_get_contents behavior.
Did you have any similar experiences, do you have any idea for a workaround ?