2

外部ライブラリを使用せずに Java でこれを実行しようとしています。このプロジェクトでは Maven を使用していないため、外部ライブラリを使用してこれを行うことはできません。

私が使用している方法は次のとおりです。

public static String shorten(String longUrl) {
    if (longUrl == null) {
        return longUrl;
    }

    StringBuilder sb = null;
    String line = null;
    String urlStr = longUrl;

    try {
        URL url = new URL("https://www.googleapis.com/urlshortener/v1/url");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("User-Agent", "toolbar");

        OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
        writer.write("url=" + URLEncoder.encode(urlStr, "UTF-8"));
        writer.close();

        BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        sb = new StringBuilder();
        while ((line = rd.readLine()) != null) {
            sb.append(line + '\n');
        }

        String json = sb.toString();
        return json.substring(json.indexOf("http"), json.indexOf("\"", json.indexOf("http")));
    } catch (MalformedURLException e) {
        e.printStackTrace();
        return longUrl;
    } catch (IOException e) {
        e.printStackTrace();
        return longUrl;
    }
}

私が得ているエラーは次のとおりです。

[23:30:44 WARN]: java.io.IOException: Server returned HTTP response code: 400 for URL: https://www.googleapis.com/urlshortener/v1/url
[23:30:44 WARN]:    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1838)
[23:30:44 WARN]:    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
[23:30:44 WARN]:    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)

この方法が機能しない場合、外部 jar を必要としない単純な Java URL 短縮の代替手段はありますか? 助けてくれてありがとう!

編集

API の URL が間違っていました。同様に新しいエラーで更新しました。

4

3 に答える 3