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):
- Dois-je régler le
Content-Type
en-tête deapplication/json
,application/x-www-form-urlencoded
, ou quoi? - Dois-je envoyer les données du corps comme
form-data
,x-www-form-urlencoded
ouraw
?
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...
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
Vous devez vous connecter pour publier un commentaire.
Après avoir cherché ici et là, j'ai découvert que le corps post de données dans le
$_POST
variables uniquement lorsque vous les envoyer, comme une forme -c'est à dire,application/x-www-form-urlencoded
- (je suppose que c'est ce que$_POST
signifie, pas la méthode utilisée pour la demande). Corrigez-moi si je dis quelque chose qui n'est pas correct.Lors de l'utilisation d'un Type de Contenu de
application/json
, le code suivant ne l'astuce:Je suppose que c'est des trucs de base, mais encore une fois, à ma connaissance, de HTTP est très limitée...
Je ne sais pas votre installation, mais c'est le code php qui a fonctionné pour moi.
Je suis à l'aide de l'application/json type
Essayer ma solution; ça fonctionne?
Bonne trouvaille. Cela a fonctionné pour moi aussi
OriginalL'auteur Nicolas Miari
Une erreur que j'ai faite lors de la première utilisation Facteur était réglez les paramètres lors de l'utilisation de la méthode POST qui serait un échec. J'ai essayé la mise à Jour 3 qui a fonctionné, et puis j'ai réalisé qu'il y avait paires clé-valeur dans l'onglet Corps.
Retrait de la params, réglage de la Corps de "x-www-form-urlencoded" et en ajoutant les variables à être posté ici fonctionne comme prévu.
Mon contrôle était, j'ai pensé qu'il y aurait une section unique pour saisir les valeurs et la méthode de déterminer la manière de transmettre ce qui fait sens dans le cas où vous souhaitez envoyer des paramètres dans l'URL avec le POST
OriginalL'auteur codemonkee
Commentaire par @FirstOne m'a sauvé. J'ai ajouté une barre oblique à l'URL et il a résolu le problème. De cette façon, mon script php peut détecter la requête POST, même sans paramètre d'en-tête de
Type de contenu application/x-www-form-
urlencoded
J'ai aussi testé mon code sans en-tête, et il fonctionne très bien. J'ai testé avec Content-type: application/json trop et il fonctionne très bien.
if($_SERVER['REQUEST_METHOD] = 'POST') { echo 'Requête est post'; }
Mon script a retourné 'Demande est après' l'aide de RESTEasy - client Rest sur Chrome.
Merci, FirstOne.
OriginalL'auteur Benny64