Ne peut pas envoyer envoyer des variables de script php sur localhost l'aide de Facteur

Je suis en train d'élaborer le côté client d'une application web dans iOS/Swift, et maintenant je suis en train de tester la partie qui communique avec le serveur. - Je configurer un site web de base sur localhost:

http://localhost/~username/ConnectivityTest/login

(ce qui correspond à /Users/username/Sites/ConnectivityTest/login sur mon Mac du système de fichiers).

Le serveur de script côté (index.php sur le répertoire ci-dessus) est:

<?PHP
    $userId   = $_POST["userId"];
    $password = $_POST["password"];

    if (empty($userId) || empty($password)){

        echo "Error: empty post variables";
    }
    else{
        //Process credentials...

Je suis en utilisant le NSURLSession API sur iOS, mais j'ai remarqué que peu importe comment j'ai configurer mes demandes, même si la connexion réussit (c'est à dire, renvoie un code http 200, et le corps de la réponse que les données), la POST variables ne sont pas disponibles (vide) sur le côté serveur.

J'ai donc décidé d'essayer d'envoyer la demande manuellement à l'aide de Facteur sur le navigateur (pour essayer d'écarter d'éventuelles erreurs sur mon iOS/Swift code), mais je ne sais pas comment je dois le configurer (je ne suis pas versé dans HTTP, il est encore un peu confus pour moi):

  1. Dois-je régler le Content-Type en-tête de application/json, application/x-www-form-urlencoded, ou quoi?
  2. Dois-je envoyer les données du corps comme form-data, x-www-form-urlencoded ou raw?

En Facteur, j'ai mis le corps de données (brutes) comme suit:

{
    "userId":"my-user-name",
    "password":"123456"
}

Alternativley, comme form-data, c'est:

userId     my-user-name      [Text]
password   12345             [Text]

Comme x-www-form-urlencoded, c'est:

userId     my-user-name      
password   12345        

Tout ce que j'ai essayer de me donne la réponse "Error: empty post variables" que j'ai mis dans mon code d'erreur de chemin d'accès (c'est à dire, $_POST['userId'] ou $_POST['password'] sont vides).

Si, au lieu de cela, je passe les variables comme paramètres d'URL:

http://localhost/~username/ConnectivityTest/login/index.php?userId=my-user-name&password=12345

...et d'y accéder dans le script comme &_GET['userId'] et $_GET['password'], il fonctionne très bien.

ce qui me manque?

Mise à JOUR: j'ai créé un fichier HTML dans le même répertoire que le fichier php:

<html>
    <body>
        <form action="index.php" method="post">
            User name: <input type="text" name="userId"><br>
                Password: <input type="text" name="password"><br>
                    <input type="submit" value="Submit">
        </form>
    </body>
</html>

Si je charge la page mentionnée ci-dessus dans un navigateur, remplissez les champs et validez le formulaire, le $_POST variables sur mon script php obtenir les valeurs correctes. Ainsi, le code php est correct, et je suis en train d'ouvrir ma demande mal en Facteur (ne sais toujours pas pourquoi).

Mise à JOUR 2: Juste au cas où il y a un problème avec localhost, j'ai déplacé le script à une salle de wb service d'hébergement que je maîtrise, mais le résultat est le même.

Mise à JOUR 3: je dois avoir raté quelque sorte avant, mais il y a UNE configuration que j'ai eu de travail:

En-têtes: Content-Type application/x-www-form-urlencoded

Corps ("raw"): userId=my-user-name&password=123456

Toutefois, cette limite me à plat des listes de clé/valeur; Si je souhaite envoyer plus structurée (c'est à dire, imbriqués) de données pour le serveur j'ai besoin de support JSON...

La lecture sur le web, il semble que application/x-www-form-urlencoded est fondamentale, plat les listes de la forme clé=valeur, alors que application/json est pour les plus complexes et/ou de données imbriquées comme les tableaux/dictionnaires etc. Alors peut-être que je devrais unifier mon format de demande de json (pour supporter de plus en plus complexe de l'API, pas juste de connexion).
Pour moi, à l'aide de localhost/something sur POSTIER ne fonctionnait pas, mais après l'ajout / à la fin, php commencé à recevoir les valeurs de la POSTE et de php://input. J'ai eu à utiliser localhost/something/ pour le faire fonctionner.

OriginalL'auteur Nicolas Miari | 2015-08-24