HOWTO · Java

Java로 URL 인코딩

이 가이드에서는 Java의 URL 인코딩 방법에 대해 설명합니다.

URL은 ASCII 문자 집합에 포함되지 않은 문자를 포함 할 수 없습니다. 인터넷을 통해 URL을 보내려는 경우 공백과 같은 문자를 추가 할 수 없습니다. 이것이 잘못된 문자를 더하기 기호 또는 백분율 기호와 같은 유효한 문자로 대체하기 위해 인코딩을 사용하는 이유입니다. 아래 예제 프로그램에서 다른 방법을 사용하여 URL을 인코딩하는 방법을 볼 수 있습니다.

Java에서URLEncoder를 사용하여 URL 인코딩

유틸리티 클래스URLEncoder는 주어진 URL을application/x-www-form-urlencoded형식으로 인코딩하는 데 도움이됩니다. 아래에서는 공백으로 구분 된 세 단어가 포함 된q문자열을 사용합니다.

URL 끝에q를 연결하면 유효한 URL에 공백이 없기 때문에 잘못된 URL이됩니다. 이 문제를 해결하기 위해 두 개의 인수를 허용하는URLEncoder.encode()메소드를 사용하여q를 인코딩합니다. 첫 번째는 쿼리 문자열q이고 두 번째는 사용할charset입니다.

URLEncoder.encode()메소드는 URL 끝에 쿼리로 연결하는 문자열을 반환합니다. 마지막 문자열encodedUrl을 인쇄하면 유효한 전체 URL이 표시되고 더하기 기호가 공백을 대체합니다.

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class EncodeUrl {
  public static void main(String[] args) {
    String q = "learn java language";
    String encodedUrl = "www.google.com/search?q=" + URLEncoder.encode(q, StandardCharsets.UTF_8);

    System.out.println("Encoded Url: " + encodedUrl);
  }
}

출력:

Encoded Url: www.google.com/search?q=learn+java+language

Java에서URL,URItoASCIIString()을 사용하여 URL 인코딩

Java의URL클래스는 URL을 구성하고 URL에 대한 정보를 얻을 수있는 몇 가지 유용한 메소드를 제공합니다. URL객체를 반환하는 URL을 만듭니다. 다음으로URI클래스의 생성자를 호출하고 인증 세부 사항이 포함 된getUserInfo()메소드를 사용하여(https/http)userinfo프로토콜과 같은 URL 정보를 전달합니다.

이제getHost()메소드를 사용하여 호스트를 가져와 유니 코드에서 ASCII 호환 인코딩 (ACE)으로 변환합니다. 다음 인수는getPort()메소드를 사용하여 가져온 포트입니다. 그러면 URI의 경로를 얻습니다. 마지막 두 인수는 쿼리와 참조입니다.

모든 인수가URI생성자로 전달되면URI객체를 반환합니다. 이 객체는toASCIIString()메소드를 사용하여 ASCII 문자열로 변환하는URI유형입니다.

import java.net.*;

public class EncodeUrl {
  public static void main(String[] args) throws MalformedURLException {
    String q = "learn java language";
    URL urlToEncode = new URL("https://www.google.com/search?q=" + q);

    try {
      URI uri = new URI(urlToEncode.getProtocol(), urlToEncode.getUserInfo(),
          IDN.toASCII(urlToEncode.getHost()), urlToEncode.getPort(), urlToEncode.getPath(),
          urlToEncode.getQuery(), urlToEncode.getRef());

      String finalEncodedUrl = uri.toASCIIString();
      System.out.println("Encoded Url: " + finalEncodedUrl);

    } catch (URISyntaxException e) {
      e.printStackTrace();
    }
  }
}

출력:

Encoded Url: https://www.google.com/search?q=learn%20java%20language

Java에서URIBuilder를 사용하여 URL 인코딩

이 예에서는 네이티브 메서드 대신 Apache HttpClient라이브러리를 사용합니다. 프로젝트에 라이브러리를 포함하기 위해 다음 종속성을 사용합니다.

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

org.apache.http.client.utils패키지의URIBuilder클래스를 사용합니다. URIBuilder객체를 만들고 생성자에urlToEncode클래스를 전달합니다. 다음으로,uriBuilder.addParameter()메소드를 사용하여 쿼리q를 매개 변수로 추가하고 쿼리 매개 변수와 해당 값을 전달합니다.

결국 전체 인코딩 된 URL을 표시하는 문자열로UriBuilder를 인쇄합니다.

import java.net.*;
import org.apache.http.client.utils.URIBuilder;

public class EncodeUrl {
  public static void main(String[] args) throws MalformedURLException {
    String q = "learn java language";
    String urlToEncode = "https://www.google.com/search";

    try {
      URIBuilder uriBuilder = new URIBuilder(urlToEncode);
      uriBuilder.addParameter("q", q);
      System.out.println("Encoded Url: " + uriBuilder.toString());

    } catch (URISyntaxException e) {
      e.printStackTrace();
    }
  }
}

출력:

Encoded Url: https://www.google.com/search?q=learn+java+language