Сервер вернул код ответа HTTP: 400
Я пытаюсь получить 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();
Но не повезло.
Любая информация заметна. Заранее спасибо.
3 ответа
Спасибо всем. Это странная проблема, но наконец я ее решил.
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")));
У меня была похожая проблема, и мой 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");
Вы правильно настраиваете соединение? Вот код, который иллюстрирует, как это сделать. Обратите внимание, что мне лень об обработке исключений, это не код качества производства.
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");
Я столкнулся с такой же ошибкой. В моем случае это произошло из-за того, что токен sizjwt в заголовке был больше допустимого размера мягким прокси-сервером mule. Один из вариантов - увеличить размер допустимого размера заголовка в программном обеспечении mule или уменьшить размер токена, удалив некоторые из разрешений, назначенных идентификатору пользователя.