【问题标题】:Server returned HTTP response code: 400服务器返回 HTTP 响应码:400
【发布时间】:2012-03-10 02:51:33
【问题描述】:

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

但没有运气。

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

【问题讨论】:

    标签: java url ioexception http-status-code-400


    【解决方案1】:

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

    我请求的网址是

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

    现在浏览器在内部用“%20”替换“榆树街上的噩梦”之间的空格并解析。这就是为什么被请求的服务器可以通过该请求进行响应。但是在 Java 中,我没有用“%20”替换那个空格,所以它变成了错误请求,source

    现在它正在工作。

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

      完整的代码/答案应该是:

      if(urlString.contains(" "))
          urlString = urlString.replace(" ", "%20");
      java.net.URL url = new URL(urlString);  
      java.io.InputStream in = url.openStream();
      

      【讨论】:

        【解决方案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());
            }
        }
        

        【讨论】:

          【解决方案4】:

          将URL中的参数编码如下:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-14
              相关资源
              最近更新 更多