Problème Je suis en train de dire qu'il semble que GET est envoyé avec file_get_contents dans ma fonction d'exécution ci-dessous. Pour la vie de moi, je ne peux pas comprendre pourquoi. J'ai testé le serveur api avec Postman en utilisant POST et cela fonctionne correctement..php n'envoie pas de POST au serveur (GET étant envoyé à la place)
La première fonction est utilisée pour transmettre mes demandes d'envoi au serveur. La deuxième fonction est dans mon fichier form_handler.php où il construit les données à envoyer via execute() au serveur.
api_handler.php
<?php
function execute($command, $context = NULL)
{
$url_scheme = "http://";
if (isset($_SERVER['HTTPS']))
{
$url_scheme = "https://";
}
$url_host = $_SERVER['HTTP_HOST'];
$url_api = "/SkedApi/";
$url = $url_scheme.$url_host.$url_api.$command;
echo $url . "<br/>";
var_dump($context);
var_dump(headers_list());
$response = file_get_contents($url, false, $context);
var_dump(headers_list());
echo $response;
if ($response)
{
$output = json_decode($response, true);
}
else
{
$output = "error";
}
return $output;
}
?>
users_handler.php
$test = array ('foo' => 'bar', 'bar' => 'baz');
$postdata = http_build_query($test);
echo $postdata;
$opts = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
. "Content-Length: " . strlen($postdata) . "\r\n",
'content' => $postdata
));
var_dump($opts);
$context = stream_context_create($opts);
print_r($context);
$result = execute("Users", $context);
if ($result)
{
echo "YES</br>";
}
De mes fichiers d'accès apache:
::1 - - [04/Jul/2017:16:02:00 -0400] "POST /SkedApi/Users HTTP/1.0" 301 239
::1 - - [04/Jul/2017:16:02:00 -0400] "GET /SkedApi/Users/ HTTP/1.0" 200 196
::1 - - [04/Jul/2017:16:02:00 -0400] "POST /SkedAvailability/users_handler.php HTTP/1.1" 200 2688
Avertissement: désolé tous les var_dumps;
double possible de [Apache 301 Redirect et la conservation des données post] (https://stackoverflow.com/questions/13628831/apache-301-redirect-and-preserving-post-data) – vhu