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

时间:2012-02-19 13:45:12

标签: java url ioexception http-status-code-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();

但没有运气。

任何信息都很明显。提前致谢。

5 个答案:

答案 0 :(得分:30)

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

我要求的网址是

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

您正确设置连接吗?这里有一些代码说明了如何做到这一点。请注意,我对这里的异常处理很懒,这不是生产质量代码。

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 :(得分:0)

按如下方式对URL中的参数进行编码:

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

答案 4 :(得分:0)

我遇到了同样的错误。在我的情况下,这是因为标头中的sizjwt令牌大于m子软代理可接受的大小。一种选择是在m子软件中增加可接受的标头大小,或者通过删除分配给用户标识的某些权限来减小令牌的大小