Frage

Ich versuche, einen Inputstream von einer URL zu bekommen. Die URL kann von Firefox geöffnet werden. Es gibt einen JSON zurück und ich habe ein Addon für das Betrachten von JSON in Firefox installiert, damit ich es dort anzeigen kann.

Also habe ich versucht, es von Java zu bekommen durch:

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

Aber es wirft eine IOException in urlConnection.getInputStream ().

Ich habe es auch versucht:

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

Aber kein Glück.

Alle Informationen sind spürbar. Danke im Voraus.

War es hilfreich?

Lösung

Dank euch allen. Dies ist ein seltsames Problem, aber schließlich habe ich es gelöst.

Die URL, die ich verlange, ist

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

Jetzt ersetzt Browser die Räume zwischen "A Nightmare on Elm Street" durch "%20" intern und Parse. Aus diesem Grund kann der angeforderte Server auf diese Anfrage antworten. Aber von Java habe ich diese Räume nicht durch "%20" ersetzt, also wird es zu einer schlechten Anfrage. Quelle.

Jetzt funktioniert es.

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

Andere Tipps

Ich hatte ein ähnliches Problem und meine URL war:

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

die offensichtlich Räume enthielt.

Diese verursachten Java.io.ioException Server gab den HTTP -Antwortcode zurück: 400 im folgenden Code:

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

Wenn Sie die obige URL kopieren und in Browser einfügen, werden Sie feststellen, dass Browser für die Räume '%20' hinzufügt. Also habe ich es manuell mit dem folgenden Code gemacht und das Problem ist gelöst.

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

Richten Sie die Verbindung richtig ein? Hier ist ein Code, der zeigt, wie das geht. Beachten Sie, dass ich hier faul bin, wenn ich hier in Bezug auf die Ausnahmeverarbeitung hier bin, dies ist kein Produktionsqualitätscode.

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

codieren die Parameter in der URL wie folgt:

String messageText = URLEncoder.encode(messageText, "UTF-8");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top