J'essaye de faire une demande POST mais je n'arrive pas à la faire fonctionner:
testRequest() {
var body = 'username=myusername?password=mypassword';
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.http
.post('/api',
body, {
headers: headers
})
.subscribe(data => {
alert('ok');
}, error => {
console.log(JSON.stringify(error.json()));
});
}
Je veux essentiellement répliquer cette requête http (pas ajax) comme si elle était originaire d'un formulaire html:
URL: / api
Paramètres: nom d'utilisateur et mot de passe
typescript
angular
Christophe
la source
la source
user_name
etpassword
, stackoverflow.com/a/45879409/2803344Réponses:
Je pense que le corps n'est pas correct pour un
application/x-www-form-urlencoded
type de contenu. Vous pouvez essayer d'utiliser ceci:J'espère que ça vous aide, Thierry
la source
import { URLSearchParams } from "@angular/http"
et non celui par défaut, donc 1) vous n'avez pas besoin de le faire.toString
dessus, et 2) vous n'avez pas besoin de définir le type de contenu. Angular l' inférera automatiquement pour vous (voir github.com/angular/angular/blob/4.4.4/packages/http/src/… )Mise à jour pour Angualar 4.3+
Maintenant, nous pouvons utiliser à la
HttpClient
place deHttp
Le guide est ici
Exemple de code
Obsolète
Ou vous pouvez faire comme ceci:
Mise à jour oct / 2017
De angular4 + , nous n'avons pas besoin
headers
, ni de.toString()
trucs. Au lieu de cela, vous pouvez faire comme l'exemple ci-dessousMéthode POST / PUT
Méthode GET / DELETE
Pour le type de
application/json
contenu JSONla source
import { URLSearchParams } from "angular2/http"
Dans les versions ultérieures d'Angular2, il n'est pas nécessaire de définir manuellement l'en-
Content-Type
tête et d'encoder le corps si vous passez un objet du bon type commebody
.Vous pouvez simplement le faire
De cette façon, angular encodera le corps pour vous et définira le bon
Content-Type
tête .PS N'oubliez pas d'importer
URLSearchParams
depuis@angular/http
ou cela ne fonctionnera pas.la source
FormData
, et angulaire sera définiContent-Type
commemultipart/form-data
qui fonctionne également.donc juste pour en faire une réponse complète:
la source
Ces réponses sont toutes obsolètes pour ceux qui utilisent HttpClient plutôt que Http. Je commençais à devenir fou en pensant: "J'ai fait l'importation d'URLSearchParams mais cela ne fonctionne toujours pas sans .toString () et l'en-tête explicite!"
Avec HttpClient, utilisez HttpParams au lieu de URLSearchParams et notez la
body = body.append()
syntaxe pour obtenir plusieurs paramètres dans le corps puisque nous travaillons avec un objet immuable:la source
Si quelqu'un a du mal avec la version angulaire 4+ (la mienne était 4.3.6) . C'était l'exemple de code qui a fonctionné pour moi.
Ajoutez d'abord les importations requises
Ensuite, pour la fonction api. C'est un exemple de connexion qui peut être modifié selon vos besoins.
la source
J'avais des problèmes avec chaque approche utilisant plusieurs paramètres, mais cela fonctionne assez bien avec un seul objet
api:
angulaire:
la source
la source
J'ai atterri ici alors que j'essayais de faire une chose similaire. Pour un type de contenu application / x-www-form-urlencoded, vous pouvez essayer de l'utiliser pour le corps:
avec ce que vous avez essayé de faire, la valeur assignée au corps sera une chaîne.
la source