URL
- Uniform Resource Location
- 정형화된 자원의 결로 표기방법(웹 주소를 의미한다.)
- 형식
프로토콜 :// 호스트 :포트/URLMapping ? 파라미터 = 값& 파라미터 = 값&파라미터 = .....https://search.naver.com:8080/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=폭염
1) 프로토콜 : 통신규약, http(secure + http : 보안처리된 하이퍼텍스트 전송 프로토콜)
2) 호스트 : 서버주소
3) URLMapping : 서버경로
4) 파라미터 : 서버로 보내는 데이터
java.net.URL 클래스
- URL을 관리하는 클래스이다.
- URL을 분석하여 원하는 정보를 얻어낼 수 있다.
- URL에 접속할 수 있는 URLConnection을 생성할 수 있다.
//URL 정보 분석하기
String apiURL = "https://search.naver.com:8080/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=폭염";
//URL객체 선언
URL url = null;
try{
//URL 객체 생성
url = new URL(apiURL); //MalformedURLException 발생
//URL 분석
System.out.println("프로토콜: " + url.getProtocol());
System.out.println("호스트: " + url.getHost());
System.out.println("파라미터: " + url.getQuery());
System.out.println("포트번호: " + url.getPort());
} catch(MalformedURLException e) {
System.out.println("api");
}
//접속할 주소
String spec = "https://ssl.pstatic.net/melona/libs/1456/1456783/4d810ba34087b36d78b5_20230803154347427.jpg";
//URL객체 선언
URL url = null;
// HttpURLConnection 객체 선언
HttpURLConnection con =null;
try {
//URL 객체 생성 (MalformedURLException 발생)
url = new URL(spec);
// HttpURLConnection 객체 생성(IOException 발생)
con = (HttpURLConnection)url.openConnection();
/*
* HTTP 응답코드
* 1. 200 : 정상
* 2. 4XX : 잘못된 요청(클라이언트의 잘못된 요청)
* 3. 5XX : 서버오류(개발을 잘못하였음)
*/
//접속 여부 확인
int respondseCode = con.getResponseCode();
System.out.println("접속여부: " + (respondseCode == HttpURLConnection.HTTP_OK));
// 요청 헤더(User-Agent) : 무엇으로 접속했는가?
String userAgent = con.getRequestProperty("User-Agent");
System.out.println("User-Agent: " + userAgent);
// 요청 헤더(Referer) : 이전 주소가 무엇인가?
String referer = con.getRequestProperty("Referer");
System.out.println("Referer: " + referer);
// 요청 헤더(Content_Type) : 어떤 타입인가?
String contentType = con.getContentType();
System.out.println("Content-Type: " + contentType);
// 컨텐트 크기 : 크기가 얼마인가?
int contentLength = con.getContentLength();
System.out.println("Content-Length: " + contentLength);
/*
* 요청 메소드
* 1. GET : 주소(URL)를 이용한 데이터 전송방식
* 2. POST :본문(BODY)을 이용한 데이터 전송
*/
// 요청 메소드 : 어떤 방식으로 요청했는가?
String requestMethod = con.getRequestMethod();
System.out.println("RequestMethod: " + requestMethod);
//접속해제
con.disconnect();
} catch(MalformedURLException e) {
System.out.println("접속 주소 오류");
} catch(IOException e) {
System.out.println("접속 오류");
}
Encoding : 원본 데이터를 암호화 하는 것
사람이 인지할 수 있는 문자응 약속된 규칙에 따라 컴퓨터가 이해하는 언어(0과 1)로 바꾸는 것을 통틀어서 일컫는다. 인코딩능 하는 이유는 정보의 형태 표준화, 보안, 저장 공간 절약 등을 위해서 이다. 문자인코딩 사진&오디오&비디오 인코딩으로 나누어진다.
Decoding : 암호화된 데이터를 원본 데이터로 복호화하는 것
인코딩의 반대되는 개면으로 복호화, 역코드화의 의미를 가지고 있다. 저장공간의 효율화, 보안 등의 이유로 인코딩한 데이커를 다시 디코딩을 해서 사용할 수 있다. 어떠한 특정방법으로 인코딩한 데이터를 동일한 방법으로 디코딩을 해주면 데이터를 읽어올 수 있다.
인코딩-디코딩-인코딩-디코딩... 이런 순환 구조를 가지고 있다.
try {
//원본 데이터
String originData = "홍길동 tom 12345 !@#$%^^&&*()_";
System.out.println("원본: " + originData);
// Encoding(암호화)
String encodeData = URLEncoder.encode(originData, "UTF-8"); //UnsupportedEncoding 발생
System.out.println("암호: " + encodeData);
// Decoding(복호화)
String decodeData = URLDecoder.decode(encodeData, "UTF_8");// UnsupportedEncoding 발생
System.out.println("복호: " + decodeData);
} catch(UnsupportedEncodingException e) {
System.out.println("인코딩 오류");
}