Erreur URLConnection-java. io. IOException: Le serveur a renvoyé le code de réponse HTTP: 400 pour l'URL


J'essaie de me connecter à une URL à partir d'une application de bureau, et j'obtiens l'erreur indiquée dans le titre de ma question, mais lorsque j'ai essayé de me connecter à la même URL à partir du servlet, tout fonctionne bien. Lorsque je charge l'URL à partir du navigateur, tout fonctionne bien. J'utilise le même code dans le servlet. Le code était dans une bibliothèque, quand cela ne fonctionnait pas, j'ai sorti le code dans une classe du projet actuel, mais cela n'a pas fonctionné.

L'URL https://graph.facebook.com/me.

Le Code fragment.

public static String post(String urlSpec, String data) throws Exception {
    URL url = new URL(urlSpec);
    URLConnection connection = url.openConnection();
    connection.setDoOutput(true);
    OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
    writer.write(data);
    writer.flush();

    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line = "";
    StringBuilder builder = new StringBuilder();
    while((line = reader.readLine()) != null) {
        builder.append(line);
    }
    return builder.toString();
}   

Je suis un peu confus ici, y a-t-il quelque chose qui est présent est un servlet qui n'est pas une application de bureau normale?

Merci.

TRACE DE PILE COMPLÈTE

Feb 8, 2011 9:54:14 AM com.trinisoftinc.jiraffe.objects.FacebookAlbum create
SEVERE: null
java.io.IOException: Server returned HTTP response code: 400 for URL: https://graph.facebook.com/me
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1313)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
        at com.jiraffe.helpers.Util.post(Util.java:49)
        at com.trinisoftinc.jiraffe.objects.FacebookAlbum.create(FacebookAlbum.java:211)
        at com.trinisoftinc.jiraffe.objects.FacebookAlbum.main(FacebookAlbum.java:261)
Author: devsri, 2011-02-08

2 answers

EDIT: Vous devez trouver le message d'erreur exact que facebook envoie dans la réponse Vous pouvez modifier votre code pour obtenir le message du flux d'erreur comme suit:

HttpURLConnection httpConn = (HttpURLConnection)connection;
InputStream is;
if (httpConn.getResponseCode() >= 400) {
    is = httpConn.getErrorStream();
} else {
    is = httpConn.getInputStream();
}

Regardez comment vous transmettez le contexte utilisateur Voici quelques informations qui pourraient vous aider:

Regardez le message d'erreur derrière le code de réponse 400:

"Facebook Platform" "invalid_request" " Un jeton d'accès actif doit être utilisé pour interroger des informations sur de l'utilisateur*

, Vous trouverez la solution ici

HTTP/1.1 400 Bad Request
...
WWW-Authenticate: OAuth "Facebook Platform" "invalid_request" "An active access token must be used to query information about the current user."
...
 50
Author: Ryan Fernandes, 2017-05-23 12:26:14

J'ai finalement trouvé le problème. Bien sûr, c'est mon code. Une partie du code que je n'ai pas publié est la valeur des données. les données doivent contenir uniquement le nom et la description, mais je passe plus que le nom et la description.

 4
Author: Aardvocate Akintayo Olusegun, 2011-02-08 10:07:41