質問

私はURLから入力ストリームを取得しようとしています。 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();

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

どんな情報もかなりです。前もって感謝します。

役に立ちましたか?

解決

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

私が要求しているURLはそうです

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

ブラウザは、「エルムストリートの悪夢」の間のスペースを「%20」と内部的に置き換えます。そのため、要求されたサーバーはそのリクエストによって応答できます。しかし、Javaから私はそのスペースを「%20」に置き換えなかったので、それは悪い要求に変わります、 ソース.

今では機能しています。

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

他のヒント

私は同様の問題を抱えていました、そして私の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");

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

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

次のようにURLのパラメーターをエンコードします。

String messageText = URLEncoder.encode(messageText, "UTF-8");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top