티스토리 뷰
728x90
java.net.URLConnection
- URL 내용을 읽어오거나, URL 주소에 GET / POST로 데이터를 전달 할 때 사용함
- 웹 페이지나 서블릿에 데이터를 전달 수 있음
- URL --> openConnection() --> URLConnection --> getInputStream --> InputStream (내용읽음)
- URL 의 OpenStream() : URL의 입력 스트림만 개설 (차이점)
- URLConnection : URL의 입력, 출력 스트림 개설
Construct
protected URLConnection(URL) : 직접 생성 불가능 , OpenConnection으로 연결함
Method
addRequestProperty(String a, String b) : 키(a) 와 값(b)을 가지고 요청할 수 있는
Properity 값을 미리 설정해 놓음. 특정 키값을 가지고 읽을 수 있도록 함
connect() : 연결 된 곳에 접속 할때 (connect() 호출해야 실제 통신 가능함)
getAllowUserInteraction() : 연결 된 곳에 사용자가 서버와 통신 할 수 있는 환경 확인(boolean)
in/output이 해당 서버 , 연결 포트로 가능한지 확인함
getContent() : content 값을 리턴 받음 (inputStream 값을 리턴 함)
getContent(Class[]) : 위 내용을 class[] 배열 값을 입력함
getContentEncoding() : 인코딩 타입을 String으로 리턴함
getContentLength() : content 길이 (-1 이면 정상적으로 값이 넘어오지 않았음)
getContentType() : content 가 http로 되어 있는지 타입 (ex: http-type )
getDate() : content의 날짜 (new Date(~~) 으로 변환해 줘야 함 / Long 리턴)
getDefaultAllowUserInteraction(): 기본적으로 User와 통신 가능한 상태인지 (boolean)
getDefaultUserCaches() : cache를 사용할 것 인지 (boolean)
getDoInput() : Server에서 온 데이터를 입력 받을 수 있는 상태인지 (본인 상태-default : true)
getDoOutput() : Server에서 온 데이터를 출력 할수 있는 상태인지
(Client 상태 -default : false)
getExpiration() : 유효 기간
getFileNameMap() : File Name Map
getHeaderField(int) : Head Field 값 받아옴 (http Head 값)
getHeaderFiled(String) :
getLastModified() : 마지막 수정 시간
getInputStream() : InputStrema 값을 뽑아냄
getOutputStream() : OutputStream 값을 뽑아냄
setDoInput(boolean) : Server 통신에서 입력 가능한 상태로 만듬
setDoOutput(boolean) : Server 통신에서 출력 가능한 상태로 만듬
- Server와 통신을 하고자 할때는 반드시 위 두 method를 true로 해 놔야 함
URL url = null;
URLConnection uc = null;
try{
url = new URL("http://www.korea.co.kr");
}catch(MalformedURLException me){}
try{ uc = url.openConnection(); }catch(IOException io){}
System.out.println("output = "+ uc.getDoOutput());
System.out.println("Input = "+ uc.getDoInput());
uc.setDoOutput(true); // 스트림 출력 설정
uc.setDoInput(true); // 스트림 입력 설정 -- 기본적으로 입력 스트림
OutputStream out =null;
InputStream in = null;
try{
in = uc.getInputStream();
// out = uc.getOutputStream();
}catch(IOException ie){}
System.out.println("input = "+ in.toString());
// System.out.println("out = "+ out.toString());
URLConnection uc = null;
try{
url = new URL("http://www.korea.co.kr");
}catch(MalformedURLException me){}
try{ uc = url.openConnection(); }catch(IOException io){}
System.out.println("output = "+ uc.getDoOutput());
System.out.println("Input = "+ uc.getDoInput());
uc.setDoOutput(true); // 스트림 출력 설정
uc.setDoInput(true); // 스트림 입력 설정 -- 기본적으로 입력 스트림
OutputStream out =null;
InputStream in = null;
try{
in = uc.getInputStream();
// out = uc.getOutputStream();
}catch(IOException ie){}
System.out.println("input = "+ in.toString());
// System.out.println("out = "+ out.toString());
[예제]
URLConnection을 이용한 Web 페이지 읽어서 저장하기
[WebSpiderWithURLConnection.java]
import java.io.FileOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
public class WebSpiderWithURLConnection {
public static void main(String[] args){
if(args.length != 2){
System.out.println("사용법 : java WebSpider URL filename");
System.exit(1);
}
URL url = null;
try{
url = new URL(args[0]);
} catch(MalformedURLException e1){
System.out.println("잘못된 URL 형식입니다.");
System.out.println(e1);
System.exit(1);
}
FileOutputStream fos = null;
try{
URLConnection urlcon = url.openConnection();
String contentType = urlcon.getContentType();
long d1 = urlcon.getDate();
Date d = new Date(d1);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
String sdata = format.format(d);
System.out.println("Content Type :" + contentType);
System.out.println("읽어온 시간 : "+ sdata);
InputStream in = urlcon.getInputStream();
fos = new FileOutputStream(args[1]);
byte[] buffer = new byte[512];
int readcount =0;
System.out.println("읽어 오기 시작 ");
while((readcount = in.read(buffer)) != -1){
fos.write(buffer,0,readcount);
}
System.out.println(args[1] + "파일에 모두 저장했습니다.");
}catch(Exception ex){
System.out.println(ex);
}finally{
try{
if(fos != null)fos.close();
}catch(Exception e){
}
}
}
}
Get 방식으로 데이터 전달함 (검색 조회해서 결과 저장함)
[GetSearch.java]
import java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class GetSearch {
public static void main(String[] args){
if(args.length != 2){
System.err.println("사용법 : java GetSearch keyword filename");
System.exit(1);
}
try{
String keyword = URLEncoder.encode(args[0]);
String query = "query="+keyword+"&frm=t1&sm=top_hty";
String u = "http://search.naver.com/search.naver";
System.out.println(u + query);
URL url = new URL(u);
URLConnection connection = url.openConnection();
HttpURLConnection hurlc = (HttpURLConnection)connection;
hurlc.setRequestMethod("GET");
hurlc.setDoOutput(true); // 쓰는 기능 on
hurlc.setDoInput(true); // 읽어 들임 기능 on
hurlc.setUseCaches(false);
hurlc.setDefaultUseCaches(false);
PrintWriter out = new PrintWriter(hurlc.getOutputStream()); //
out.println(query);
out.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(hurlc.getInputStream()));
PrintWriter pw = new PrintWriter(new FileWriter(args[1]));
String inputLine = null;
while((inputLine = in.readLine()) != null){
pw.println(inputLine);
}
in.close();
pw.close();
System.out.println("검색 결과가 " + args[1] + "파일에 저장되었습니다.");
}catch(Exception ex){
System.out.println(ex);
}
}
}
[PostConnection.java]
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class PostConnection {
public static void main(String[] args){
if(args.length != 2){
System.out.println("사용법 : java Postconnection id password");
System.exit(1);
}
try{
String id = URLEncoder.encode(args[0]);
String passwd = URLEncoder.encode(args[1]);
String query = "id="+id+"&passwd="+passwd;
String u = "http://localhost/test.jsp";
System.out.println(u + query);
URL url =new URL(u);
URLConnection connection = url.openConnection();
HttpURLConnection hurlc = (HttpURLConnection)connection;
hurlc.setRequestMethod("POST");
hurlc.setDoOutput(true);
hurlc.setDoInput(true);
hurlc.setUseCaches(false);
hurlc.setDefaultUseCaches(false);
PrintWriter out = new PrintWriter(hurlc.getOutputStream());
out.println(query);
out.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(hurlc.getInputStream()));
String inputLine = null;
while((inputLine = in.readLine()) != null){
System.out.println(inputLine);
}
in.close();
}catch(Exception ex){
System.out.println(ex);
}
}
}
java.net.URLEncoder - Static method : encode(String, String)
- Encoding : 아스키 문자가 아닌 문자열들을 특수한 문자들로 변환하는 것
String encodeStr = URLEncoder.encode(str,"EUC_KR");
- 문자셋 : EUC_KR 등 뒤에 붙여줌java.net.URLDecoder - Static method : decode(String, String)
String decodeStr = URLDecoder.decode(str,"EUC_KR");
- static Method 하나만 존재함
- 네트워크는 데이터를 byte로 전송함, 이를 만드는 것을 Encoder ,
해제하는 것을 Decoder라고 함
String data = "테스트 전송";
String dataconver = null;
//============ Encoder ==============//
try{
dataconver = URLEncoder.encode(data,"KSC5601"); // KSC5601 --> euc-kr
}catch(UnsupportedEncodingException ie){}
System.out.println("data = "+ data);
System.out.println("data conver = "+ dataconver);
// ============ Decoder ============== //
try{
dataconver = URLDecoder.decode(dataconver,"KSC5601");
}catch(UnsupportedEncodingException ue){}
System.out.println("data conver = "+ dataconver);
결과
data = 테스트 전송
data conver = %C5%D7%BD%BA%C6%AE+%C0%FC%BC%DB
data conver = 테스트 전송
String dataconver = null;
//============ Encoder ==============//
try{
dataconver = URLEncoder.encode(data,"KSC5601"); // KSC5601 --> euc-kr
}catch(UnsupportedEncodingException ie){}
System.out.println("data = "+ data);
System.out.println("data conver = "+ dataconver);
// ============ Decoder ============== //
try{
dataconver = URLDecoder.decode(dataconver,"KSC5601");
}catch(UnsupportedEncodingException ue){}
System.out.println("data conver = "+ dataconver);
결과
data = 테스트 전송
data conver = %C5%D7%BD%BA%C6%AE+%C0%FC%BC%DB
data conver = 테스트 전송
출처 : http://zeroit.tistory.com/214
'프로그래밍 > Java' 카테고리의 다른 글
[Java] DB(MySQL, Oracle, MS-SQL) 접속 (2) | 2011.09.21 |
---|---|
[Java] 메일 보내기 (0) | 2011.09.19 |
[Java] 자바에서 웹문서 읽어오는 법 (0) | 2011.09.15 |
[Java] 랜덤 점심 메뉴 고르기 프로그램 (2) | 2011.07.25 |
[Java] 자바에서 브라우저 띄우기 (0) | 2011.07.07 |
TAG
- 기본
- 랜덤
- 주피터 노트북
- 함수
- MacOS
- 동양인
- 코멧
- 여성가족부
- 오류
- 특수문자
- 스트럿츠
- window
- EL
- 테이블
- 시각 차이
- ibatis
- 서양인
- JavaScript
- 스프링
- 파이썬
- struts
- Android
- JSP
- 페이지 이동
- 안드로이드
- mvc
- jstl
- 데이터베이스
- 구매 가이드
- 자바스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함
- Total
- Today
- Yesterday