정확하게는 모르지만 왠지 내가 알기론 Apache Commons HttpClient 후로젝트가 Apache HttpComponents 로 바뀐것 같다.
그러니까 최신 API 는 아마 Apache HttpComponents 이겠지...
그런데 왜 굳이 옛날 API 로 예제를 맹글게 되었을까..?
피치못할 사정으로 JDK 1.4 기반에서 동작하도록 해야했기 때문이다 -.-
나 같은 저주 받은 개발환경이 아닌 사람들은 이전에 썼던 포스트를 참고해서 고거 쓰면 된다.
뭐 아무튼 예제 소스는 요럿다.
package com.tistory.stove99;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.apache.commons.lang.StringEscapeUtils;
public class Http {
private static final String DEFAULT_ENCODING = "UTF-8";
private String url;
private String encoding;
private Map param;
public Http(String url){
this(url, null);
}
public Http(String url, String encoding){
this.encoding = encoding==null ? DEFAULT_ENCODING : encoding;
this.url = url;
param = new HashMap();
}
/**
* Http 전송
* @return
*/
public String submit(){
String result = null;
HttpClient client = new HttpClient();
PostMethod method = new PostMethod (url);
try{
Part[] parts = new Part[param.size()];
Iterator it = param.keySet().iterator();
int index = 0;
while( it.hasNext() ){
String key = (String)it.next();
Object value = param.get(key);
if( value instanceof File ){
// 한글 파일명이 쪽바로 처리가 안되서 StringEscapeUtils 썻음.
// 받는 쪽에서는 StringEscapeUtils.unescapeHtml() 로 다시 변환바람.
parts[index++] = new FilePart(
key,
StringEscapeUtils.escapeHtml(((File)value).getName()),
(File)value,
null,
encoding);
}else{
parts[index++] = new StringPart(key, (String)value, encoding);
}
}
method.setRequestEntity(new MultipartRequestEntity(parts, method.getParams()));
client.executeMethod(method);
// read result
BufferedReader br = new BufferedReader(
new InputStreamReader(method.getResponseBodyAsStream(), encoding));
String buffer = null;
StringBuffer tmp = new StringBuffer();
while( (buffer=br.readLine())!=null ){
tmp.append(buffer).append("\r\n");
}
result = tmp.toString();
}catch (HttpException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
method.releaseConnection();
}
return result;
}
/**
* 일반 파라메터 추가
* @param name 파라메터 이름
* @param value 값
* @return
*/
public Http addParam(String name, String value){
param.put(name, value);
return this;
}
/**
* 업로드할 파일을 파라메터로 추가
* @param name <input type="file" name="요기들어가는 값"/>
* @param file
* @return
*/
public Http addParam(String name, File file){
param.put(name, file);
return this;
}
/**
* 테스트
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Http http = new Http("http://127.0.0.1:8888/rpm/alarm/receive.kins");
String result = http.addParam("test", "테스트다1")
.addParam("test1", "테스트다2")
.addParam("upload_file1", new File("d:\\야훗훗 유지보수.xlsx"))
.addParam("upload_file2", new File("d:\\휴가신청서.hwp"))
.submit();
System.out.println("result : " + result);
}
}
Maven Dependency
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>