Сервер вернул код ответа HTTP: 400 - PullRequest
14 голосов
/ 19 февраля 2012

Я пытаюсь получить InputStream из URL. URL-адрес может быть открыт из Firefox. Он возвращает json, и я установил надстройку для просмотра json в Firefox, чтобы я мог просмотреть его там.

Поэтому я попытался получить его с Java:

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

Но он выдает IOException в urlConnection.getInputStream ().

Я тоже пробовал:

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

Но не повезло.

Любая информация заслуживает внимания. Заранее спасибо.

Ответы [ 4 ]

31 голосов
/ 19 февраля 2012

Спасибо всем.Это странная проблема, но наконец я ее решил.

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")));
5 голосов
/ 28 февраля 2019

У меня была похожая проблема, и мой URL был:

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

, который явно содержал пробелы.

Это вызвало java.io.IOException Server вернул код ответа HTTP: 400 в следующем коде:

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

Если вы скопируете вышеуказанный URL-адрес и вставите его в браузер, вы поймете, что браузер добавляет «% 20» для пробелов.Поэтому я сделал это вручную с помощью следующего кода, и проблема решена.

if(urlString.contains(" "))
    urlString = urlString.replace(" ", "%20");
3 голосов
/ 19 февраля 2012

вы правильно настраиваете соединение? Вот код, который иллюстрирует, как это сделать. Обратите внимание, что мне лень об обработке исключений, это не код качества производства.

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());
    }
}
0 голосов
/ 04 февраля 2018

кодировать параметры в URL следующим образом:

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