프로그래밍/Android

HTTP POST/GET 몇가지 정리

chance 2012. 1. 30. 15:41

 

연결정보

String url="https://my.site.com/test"

 

클라이언트 생성

HttpClient client = new DefaultHttpClient();

// 아래 파라미터를 미리 설정 후 파라미터를 기반으로 생성해도 된다.

 

파라미터설정 : CoreProtocolPNames

PROTOCOL_VERSION : 프로토콜 버전

USER_AGENT : User-Agent 헤더

.

.

 

HttpParams params = client.getParams();

 

// 프로토콜 정의

params.setParameter( CoreProtocolPName.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

 

 

// client 생성하지 않은경우 생성

// HttpClient client = new DefaultHttpClient(params);

 

 

POST

HttpPost post=new HttpPost( url );

 

// body 구성

// 기본적인 스트링 데이터의 전송

List<NameValuePair> pair = new List<NameValuePair>();

pair.add( new BasicNameValuePair("username", 유저명 ));

pair.add( new BasicNameValuePair("password", 암호 ));

UrlEncodedFormEntity ent = new UrlEncodedFormEntity( pair , HTTP.UTF_8);

post.setEntity( ent );

 

 

// 다양한 entity의 전송 : MultipartEntity

File file = new File(" test.jpg" );

ContentBody fileBody = new FileBody( file , "image/jpeg" );

MultipartEntity mpEntity = new MultipartEntity(); // HttpMultipartMode

mpEntity.addPart( "내파일", fileBody );

mpEntity.addPart( "type" , new StringBody("어쩌구") );

post.setEntity( mpEntity );

 

 

전송 및 응답

 

HttpResponse response = client.execute( post );

HttpEntity entity = response.getEntity();

 

 

if( response.getStatusLine().getStatusCode() == 200 )  // HttpStatus.SC_OK

{

// 데이터 읽기

} else {

// 서버오류

}

 

데이터(BODY) 읽기

* 스트링 읽어오기

String responseString = EntityUtils.toString( entity, "UTF-8" );

 

 

* 스트림으로 읽어오기

InputStream is = null;

is =  entity.getContent();

 

int len = (int) entity.getContentLength();

if( len > 0 ) {

byte[] data = new byte[len];

int offset = 0;

int bytesRead =  0;

do {

bytesRead = is.read( data, offset, len );

offset += bytesRead;

len -= bytesRead;

 

} while( bytesRead > 0 );

 

is.close();

 

is = new ByteArrayInputStream( data );

}

 

 

* 리더 사용해 텍스트형 body 읽어오기

BufferrReader reader = new BufferReader( new InputStreamReader( is, "디코딩형식"));

StringBuilder sb = new StringBuilder();

String line = null;

while( (line = reader.readLine() ) != null ) {

sb.append(line);

sb.append("\n");

}

is.close();

 

데이터 = sb.toString();

 

 

* xml 바로 파싱하기(accept: application/xml 인 경우)

XmlPullParserFactory xml = XmlPullParserFactory.newInstance();

XmlPullParser parser = xml.newPullParser();

parser.setInput( new InputStreamReader( is, "디코딩형식"));

while( parser.next() != XmlPullParser.END_DOCUMENT ) {

String name = parser.getName();

if( name != null && name.equals("태그명") )

값 = parser.nextText();

}

 

연결 종료

client.getConnectionManager().shutdown();

 

 

 

GET

InputStream is =null;

HttpGet get = new HttpGet( url );

HttpClient client = new DefaultHttpClient();

 

HttpResponse response = client.execute( get );

is = response.getEntity().getContent();