服务器返回的 HTTP 响应代码:400

我正在尝试从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();

但是没有运气。

任何信息都是可观的。提前致谢。


答案 1

谢谢大家。这是一个奇怪的问题,但最终我解决了它。

我请求的网址是

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

答案 2

我遇到了类似的问题,我的网址是:

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