Java로 URL 인코딩

Rupam Yadav 2023년10월12일
  1. Java에서URLEncoder를 사용하여 URL 인코딩
  2. Java에서URL,URItoASCIIString()을 사용하여 URL 인코딩
  3. Java에서URIBuilder를 사용하여 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
작가: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn