Envoyer form-urlencoded paramètres dans la requête post android volley
Je veux faire un POST JSONObjectRequest avec le formulaire urlencoded paramètres. Comment puis-je faire cela? J'ai essayé le code suivant, mais en vain.
final String api = "http://api.url";
final JSONObject jobj = new JSONObject();
jobj.put("Username", "usr");
jobj.put("Password", "passwd");
jobj.put("grant_type", "password");
final JsonObjectRequest jor = new JsonObjectRequest(
Request.Method.POST,
api, jobj,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Toast.makeText(getApplicationContext(), "Login Successful!", Toast.LENGTH_LONG).show();
//do other things with the received JSONObject
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG).show();
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> pars = new HashMap<String, String>();
pars.put("Content-Type", "application/x-www-form-urlencoded");
return pars;
}
};
//add to the request queue
requestqueue.AddToRequestQueue(jor);
Je suis un 400 bad request avec l'appel d'api! Comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Après un long combat, a trouvé la solution. Vous avez besoin de remplacer
getBodyContentType()
et retourapplication/x-www-form-urlencoded; charset=UTF-8
.et votre corps doit être comme ceci "username=aa&mot de passe=bb&[email protected]"
essayez d'utiliser
StringRequest
comme le code ci-dessous:Postman
ouRESTClient
et me dire le résultat?application/x-www-form-urlencoded
etparams
?everything is as you told me
!headers.put("Content-Type", "application/json; charset=utf-8");
Volley ajoute un en-tête Content-Type juste avant la demande est envoyée.
Vous devez ignorer ceci avec une demande personnalisée de l'objet.
J'ai fait de la manière suivante (le type de contenu de ma demande-corps est application/x-www-form-urlencoded):
J'ai commenté à des endroits appropriés dans le code.
Il n'y a pas de premade constructeur dans
JsonObjectRequest
qui accepte des paramètres post, si vous faites votre propre constructeurVous devez affecter votre Carte à déjà une variable déclarée dans la méthode au sein de votre constructeur, et vous devez également ajouter cette méthode
JsonObjectRequest.java
dans votre projet de Volley-ball. Ajoutez le codeMap<String, String> param;
puis dans votre constructeur, vous devez ajouterthis.params = jobj;
Utilisez cette fonction si vous devez envoyer comme "application/json"
}