18 votes

Le serveur a renvoyé le code de réponse HTTP : 400

J'essaie d'obtenir un InputStream à partir d'une URL. L'URL peut être une ouverture de Firefox. Elle renvoie un json et j'ai installé un addon pour afficher le json dans Firefox afin de pouvoir le visualiser.

Alors j'ai essayé de l'obtenir de Java by :

URL url = new URL(urlString);
URLConnection urlConnection = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

Mais il jette une IOException dans urlConnection.getInputStream().

J'ai aussi essayé :

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = url.openStream();

Mais pas de chance.

Toute information est appréciable. Merci d'avance.

38voto

Tapas Bose Points 5639

Merci à tous. C'est un problème bizarre, mais j'ai enfin réussi à le résoudre.

L'URL que je demande est

http://api.themoviedb.org/2.1/Movie.search/en/json/api_key/a nightmare on elm street 

Maintenant le navigateur remplace les espaces entre "a nightmare on elm street" par "%20" en interne et analyse. C'est pourquoi le serveur demandé peut répondre à cette requête. Mais à partir de Java, je n'ai pas remplacé les espaces par "%20", et cela devient une mauvaise demande, fuente .

Maintenant, ça marche.

BufferedReader reader = new BufferedReader(new InputStreamReader(((HttpURLConnection) (new URL(urlString)).openConnection()).getInputStream(), Charset.forName("UTF-8")));

8voto

harshainfo Points 173

J'ai eu un problème similaire et mon url était :

http://www.itmat.upenn.edu/assets/user-content/documents/ITMAT17. October 10 2017_.pdf

qui contenait manifestement des espaces.

Ceux-ci ont causé java.io.IOException Le serveur a renvoyé le code de réponse HTTP : 400 dans le code suivant :

java.net.URL url = new URL(urlString);  
java.io.InputStream in = url.openStream();

Si vous copiez l'url ci-dessus et la collez dans le navigateur, vous vous rendrez compte que le navigateur ajoute '%20' pour les espaces. Je l'ai donc fait manuellement avec le code suivant et le problème est résolu.

if(urlString.contains(" "))
    urlString = urlString.replace(" ", "%20");

Code complet/réponse devrait être :

if(urlString.contains(" "))
    urlString = urlString.replace(" ", "%20");
java.net.URL url = new URL(urlString);  
java.io.InputStream in = url.openStream();

3voto

Paul Sanwald Points 3762

Est-ce que vous configurez la connexion correctement ? Voici un code qui illustre comment faire. Notez que je suis paresseux sur la gestion des exceptions ici, ce n'est pas un code de qualité de production.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class URLFetcher {

    public static void main(String[] args) throws Exception {
        URL myURL = new URL("http://www.paulsanwald.com/");
        HttpURLConnection connection = (HttpURLConnection) myURL.openConnection();
        connection.setRequestMethod("GET");
        connection.setDoOutput(true);
        connection.connect();
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        StringBuilder results = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            results.append(line);
        }

        connection.disconnect();
        System.out.println(results.toString());
    }
}

2voto

MahmoudS Points 6654

Coder les paramètres dans l'URL comme suit :

String messageText = URLEncoder.encode(messageText, "UTF-8");

0voto

Aneesh Points 1

J'ai rencontré la même erreur. Dans mon cas, c'était parce que le jeton sizjwt dans l'en-tête était plus grand que la taille acceptable par mule soft proxy. Une option est d'augmenter la taille de l'en-tête acceptable dans mule soft, ou de réduire la taille du jeton en supprimant certaines des permissions attribuées à l'identifiant de l'utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X