16

URL から InputStream を取得しようとしています。URL は Firefox から開くことができます。それはjsonを返し、Firefoxでjsonを表示するためのアドオンをインストールしたので、そこで表示できます。

だから私はJavaからそれを取得しようとしました:

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

しかし、urlConnection.getInputStream() で IOException をスローしています。

私も試しました:

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

しかし、運がありません。

どの情報も貴重です。前もって感謝します。

4

5 に答える 5

36

みなさん、ありがとうございました。これは奇妙な問題ですが、ついに解決しました。

私がリクエストしているURLは

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

これで、ブラウザは「エルム街の悪夢」の間のスペースを内部で「%20」に置き換えて解析します。そのため、要求されたサーバーはその要求によって応答できます。しかし、Javaからは、そのスペースを「%20」に置き換えなかったため、Bad Request、sourceになります。

今それは働いています。

BufferedReader reader = new BufferedReader(new InputStreamReader(((HttpURLConnection) (new URL(urlString)).openConnection()).getInputStream(), Charset.forName("UTF-8")));
于 2012-02-19T14:27:37.737 に答える
7

同様の問題があり、私のURLは次のとおりです。

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

明らかにスペースが含まれていました。

これらにより、java.io.IOException サーバーが HTTP 応答コードを返しました: 次のコードで 400:

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

上記の URL をコピーしてブラウザーに貼り付けると、ブラウザーがスペースに「%20」を追加することがわかります。したがって、次のコードを使用して手動で実行したところ、問題は解決しました。

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

完全なコード/回答は次のとおりです。

if(urlString.contains(" "))
    urlString = urlString.replace(" ", "%20");
java.net.URL url = new URL(urlString);  
java.io.InputStream in = url.openStream();
于 2019-02-28T08:02:56.703 に答える
3

接続を正しく設定していますか?これを行う方法を示すコードを次に示します。ここでは例外処理を怠っていることに注意してください。これは製品品質のコードではありません。

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());
    }
}
于 2012-02-19T14:19:59.037 に答える