l'exécution de http POST renvoie HTML au lieu de JSON
MODIFIER complètement re-travailler la question pour mieux comprendre
J'ai une requête à l'url donnée http://api.bf3stats.com/pc/player/
avec 2 paramètres POST: "joueur" (nom du joueur) et 'opt' (pour les options). Je l'ai testé sur http://www.requestmaker.com/ avec les données suivantes: player=Zer0conf&opt=all
. Je suis une bonne réponse JSON (la pensée, je ne sais pas comment leur site effectue la requête, je suppose que c'est du php). Maintenant, je suis en train de faire la même chose dans Android:
private StringBuilder inputStreamToString(InputStream is) {
//this method converts an inputStream to String representation
String line = "";
StringBuilder total = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((line = rd.readLine()) != null) {
total.append(line);
}
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return total;
}
et c'est ainsi que je en faire la demande:
public void postData(String url, String name) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
//qname is a String containing a correct player name
nameValuePairs.add(new BasicNameValuePair("player", qname));
nameValuePairs.add(new BasicNameValuePair("opt", "all"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
//test is just a string to check the result, which should be in JSON format
test = inputStreamToString(response.getEntity().getContent())
.toString();
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
}
Ce que je suis arriver dans le "test" de la Chaîne n'est pas du JSON, mais la totalité du code HTML de balisage de certains bf3stats page. Ce qui pourrait être mal avec ma demande?
OriginalL'auteur Droidman | 2013-07-15
Vous devez vous connecter pour publier un commentaire.
vous devez définir le type de contenu
"application/x-www-form-urlencoded"
dans vos en-têtes de demande pour le type de données que vous voulez envoyer.J'ai testé votre API pour les données précitées, il fonctionne très bien et j'ai reçu les charges de données en réponse. Vous pouvez le trouver ici.
Vous pouvez essayer le code suivant:
Edit: j'ai été faire d'erreur Échec de l'Attente d'erreur - 417 pour votre Webservice. Nous avons donc besoin d'ajouter un param dans notre demande. Il est
request.getParams().setParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, Boolean.FALSE);
. J'ai mis à jour le code ci-dessus avec cette. Maintenant, il fonctionne très bien.Réponse ressemble à quelque chose comme ça.
Espère que cela aidera.
Acclamations
N_JOY
J'ai essayé, mais maintenant le serveur est de donner 403 forbidden
vraiment étrange.. juste exécuté le code que j'ai posté sur pastebin, aucune erreur, mais le HTML au lieu de JSON..
Nous avons manqué un param dans notre demande. mise à jour de la même dans la réponse.
merci beaucoup, j'ai enfin obtenu la réponse correcte dans le "test" de la Chaîne! Encore une petite question: maintenant, ma classe ressemble à pastebin.com/icV8H5vj (veuillez cocher la OnPostExecute méthode) Pour une raison quelconque, je ne peux pas transmettre les données reçues à une autre Activité, ma demande sorties seulement après la connexion, un message "démarrage de l'activité". Ai-je raté quelque chose de nouveau?
OriginalL'auteur N-JOY
Essayez d'afficher l'url dans le navigateur, je crois qu'il y est une !Déclaration DOCTYPE, qui certainement ne peut pas être analysé à un objet JSON.
Si c'est cette url qui nécessite une forme de variable de session (comme les informations de connexion), il n'est pas possible de le consulter directement via le navigateur, mais vous pouvez vérifier la Chaîne de jsonResults par l'utilisation d'eclipse outil de débogage ou tout simplement de journalisation pour voir le a reçu la réponse. Une bonne réponse JSON ne doit pas contenir de déclaration DOCTYPE de toute façon.
J'ai édité la question, était en train de marcher dans le mauvais sens..
OriginalL'auteur reTs