HttpUrlConnection BadRequest - 状态码 400

HttpUrlConnection BadRequest - Statuscode 400

我已经使用 HttpUrlConnection 实现了 class 从 google 地理编码 api 获取一些数据。当我在 android 上使用此代码时,它可以正常工作。但是,一旦我在另一个 "normal" java 程序中使用此代码,我有时会收到 status-code 400 (BadRequest)。这是我的代码:

HttpURLConnection c = null;
    StringBuilder sb = new StringBuilder();
    try {
        URL u = new URL(url);
        c = (HttpURLConnection) u.openConnection();
        c.setRequestMethod("GET");
        c.setRequestProperty("Content-length", "0");
        c.setUseCaches(false);
        c.setAllowUserInteraction(false);
        c.setConnectTimeout(timeout);
        c.setReadTimeout(timeout);
        c.connect();
        int status = c.getResponseCode();

        switch (status) {
            case HttpURLConnection.HTTP_OK:
            case HttpURLConnection.HTTP_CREATED:
                BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line + "\n");
                }
                br.close();   
        }
    } catch (SocketTimeoutException ex){
        // Handle ...
    } catch (MalformedURLException ex) {
        // Handle ...
    } catch (IOException ex) {
        // Handle ...
    } finally {
        if (c != null) {
            try {
                c.disconnect();
            } catch (Exception ex) {

            }
        }
    }

我有可靠的互联网连接,而且我用来接收数据的 URL 也能正常工作,每当我尝试使用网络浏览器时。 提前致谢!

Bad Request 通常是由于 URL 不合适造成的。正如您提到的,并非每个 URL 都会出现此错误,只是对它们的一个看法。所以它必须与此有关。请尝试以下代码以确保您使用的 URL 的编码正确:

String url = ...;  // your url
url = URLEncoder.encode(url,"UTF-8");
// Use 'url' ...