web-dev-qa-db-ja.com

サーバーがHTTP応答コードを返しました:400

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

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

すべての情報はかなりのものです。前もって感謝します。

15
Tapas Bose

みなさんありがとう。これは奇妙な問題ですが、ようやく解決しました。

私が要求しているURLは

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

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

今では動作しています。

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

私は同様の問題があり、私のURLは次のとおりでした:

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

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

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

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

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

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

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

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

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

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