web-dev-qa-db-fra.com

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 ouverte depuis Firefox. Il retourne un json et j'ai installé un addon pour visualiser json dans Firefox afin que je puisse le voir ici.

J'ai donc essayé de l'obtenir à partir de Java en:

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

Mais il lève une exception 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. 

10
Tapas Bose

Merci tout le monde. C'est un problème étrange, mais je l'ai enfin résolu. 

L'URL que je demande est 

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

Le navigateur remplace maintenant les espaces entre "un cauchemar sur la rue Elm" par "% 20" en interne et les analyse. C'est pourquoi le serveur demandé peut répondre par cette requête. Mais de Java, je n’ai pas remplacé ces espaces par "% 20", ce qui en fait une requête incorrecte, source .

Maintenant ça marche.

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

vous configurez la connexion correctement? voici un code qui illustre comment faire cela. 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());
    }
}
3
Paul Sanwald

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 comme des espaces clairement évidement contenus.

Ceci provoquait Java.io.IOException Server 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 collez-le dans le navigateur, vous constaterez qu'il ajoute '% 20' aux espaces. Donc je l'ai fait manuellement avec le code suivant et le problème est résolu.

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

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

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