Je construis une webapp avec une API REST associée dans le backend.Demande POST à l'API REST sur Android ne pas obtenir les paramètres
L'API fait avec django-repos-cadre travaille, je peux faire ce qui suit de la ligne de commande:
$ http http://localhost:8000/API/api-token-auth/ username=ortho1 password=123456
HTTP/1.0 200 OK
Allow: POST, OPTIONS
Content-Type: application/json
Date: Wed, 11 May 2016 12:43:05 GMT
Server: WSGIServer/0.2 CPython/3.5.1+
Vary: Cookie
X-Frame-Options: SAMEORIGIN
{
"token": "4d6e32726e321448fc212242fc03a3fa84c80510"
}
Mais de mon Android App j'essaie de faire ce qui suit:
protected String doInBackground(String... urls) {
// Starting the request
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL("http://10.0.2.2:8000/API/api-token-auth/");
urlConnection = (HttpURLConnection) url.openConnection();
/* optional request header */
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
/* for GET request */
urlConnection.setRequestMethod("POST");
String urlParameters =
"username=" + URLEncoder.encode("ortho1", "UTF-8") +
"&password=" + URLEncoder.encode("123456", "UTF-8");
urlConnection.setRequestProperty("Content-Length", "" +
Integer.toString(urlParameters.getBytes().length));
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
DataOutputStream wr = new DataOutputStream (
urlConnection.getOutputStream());
wr.writeBytes (urlParameters);
wr.flush();
wr.close();
InputStream inputStream;
if (urlConnection.getResponseCode() == 200) { // 2xx code means success
inputStream = urlConnection.getInputStream();
} else {
inputStream = urlConnection.getErrorStream();
}
inputStream = new BufferedInputStream(inputStream);
String response = convertInputStreamToString(inputStream);
Log.i("Request", response);
return response;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if(urlConnection != null) {
urlConnection.disconnect();
}
}
}
private String convertInputStreamToString(InputStream inputStream) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null){
result += line;
}
/* Close Stream */
if(null!=inputStream){
inputStream.close();
}
return result;
}
je reçois dans la console comme réponse du serveur:
{"detail":"JSON parse error - Expecting value: line 1 column 1 (char 0)"}
comme résultat.
Que pourrais-je faire de mal?
Vous n'êtes pas envoyer "jeton". – greenapps
Le jeton est dans la réponse, pas dans la demande dans le premier exemple. –
Ok. '$ http http: // localhost: 8000/API/api-jeton-auth/nom d'utilisateur = mot de passe ortho1 = 123456'. Je ne sais pas django mais pourquoi serait-ce un POST? Pour moi, ça ressemble plus à un GET. – greenapps