2017-07-04 1 views
0

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;

+0

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

Répondre

0

Bien que votre journal affiche une réponse 301 à une demande POST suivie d'une réponse 200 à la même URL avec une barre oblique finale ajoutée.

Qu'advient-il si vous changez cette ligne de votre users_handler.php

$result = execute("Users", $context); 

à cela?

$result = execute("Users/", $context); 
+0

Il a travaillé .. Maintenant, je dois trouver la meilleure façon de faire des redirections et passer les données POST – keelerjr12

+0

Vous pouvez ajouter une règle de réécriture avec le code de réponse 307 pour toutes les demandes POST. L'option facile bien sûr est juste de modifier votre fonction d'exécution de sorte qu'il ajoute une barre oblique à la fin de la variable $ url – miknik

+0

Malheureusement, la chose [R = 307] ne fonctionne pas. – keelerjr12