Pregunta

Estoy tratando de obtener un inputstream de una URL. La URL puede ser abierta desde Firefox. Devuelve un JSON y he instalado un complemento para ver JSON en Firefox para que pueda verlo allí.

Así que intenté obtenerlo de Java por:

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

Pero está lanzando una IOException en UrlConnection.getInputStream ().

También lo intenté:

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

Pero no hay suerte.

Cualquier información es apreciable. Gracias por adelantado.

¿Fue útil?

Solución

Gracias a todos. Este es un problema extraño, pero por fin lo resolví.

La URL que estoy solicitando es

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

Ahora el navegador reemplaza los espacios entre "A Nightmare on Elm Street" por "%20" internamente y analizados. Es por eso que el servidor solicitado puede responder mediante esa solicitud. Pero de Java no reemplazé esos espacios por "%20", por lo que se convierte en mala solicitud, fuente.

Ahora está funcionando.

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

Otros consejos

Tuve un problema similar y mi URL era:

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

que obviamente contenía espacios.

Estos causados Java.io.ioexception Server devolvió el código de respuesta HTTP: 400 En el siguiente código:

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

Si copia la URL anterior y pegue en el navegador, se dará cuenta de que el navegador agrega '%20' para los espacios. Así que lo hice manualmente con el siguiente código y el problema se resuelve.

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

¿Estás configurando la conexión correctamente? Aquí hay algún código que ilustra cómo hacer esto. Tenga en cuenta que estoy siendo perezoso sobre el manejo de excepciones aquí, este no es un código de calidad de producción.

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());
    }
}

Codifique los parámetros en la URL de la siguiente manera:

String messageText = URLEncoder.encode(messageText, "UTF-8");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top