package com.example.http;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.NameValuePair;
import org.apache.http.ProtocolVersion;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HttpContext;
public class HttpHelper
{
public static final String CONTENT_TYPE = "Content-Type";
/**使用HTTP的POST方法提交的表单*/
public static final String MIME_FORM_ENCODED = "application/x-www-form-urlencoded";
/**纯文本*/
public static final String MIME_TEXT_PLAIN = "text/plain";
/**HTML文档*/
public static final String MIME_TEXT_HTML = "text/html";
/**XHTML文档*/
public static final String MIME_XHTML = "application/xhtml+xml";
/**GIF图像*/
public static final String MIME_IMAGE_GIF = "image/gif";
/**JPEG图像*/
public static final String MIME_IMAGE_JPG = "image/jpeg";
/**PNG图像*/
public static final String MIME_IMAGE_PNG = "image/png";
/**MPEG动画*/
public static final String MIME_IMAGE_VIDEO = "video/mpeg";
/**任意的二进制数据*/
public static final String MIME_STREAM = "application/octet-stream";
/**PDF文档*/
public static final String MIME_PDF = "application/pdf";
/**Microsoft Word文件*/
public static final String MIME_WORD= "application/msword";
/**HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示*/
public static final String MIME_NATIVE = "multipart/alternative";
/**使用HTTP的POST方法提交的表单,但主要用于表单提交时伴随文件上传的场合*/
public static final String MIME_DATA = "multipart/form-data";
private final ResponseHandler<?> mResponseHandler;
public static enum TYPE
{
GET, POST
}
public HttpHelper(ResponseHandler<?> responseHandler)
{
mResponseHandler = responseHandler;
}
/**
*
* @param uri
* @param user
* @param pwd
* @param aationHeaders
*/
public void performGet(String uri, String user, String pwd,
final Map<String, String> aationHeaders)
{
perRequest(null, uri, user, pwd, aationHeaders, null, TYPE.GET);
}
/**
*
* @param contentType
* @param uri
* @param user
* @param pwd
* @param aationHeaders
* @param params
*/
public void performPost(String contentType, String uri, String user,
String pwd, final Map<String, String> aationHeaders,
final Map<String, String> params)
{
perRequest(contentType, uri, user, pwd, aationHeaders, params, TYPE.POST);
}
/**
*
* @param uri
* @param user
* @param pwd
* @param aationHeaders
* @param params
*/
public void performPost(String uri, String user, String pwd,
final Map<String, String> aationHeaders,
final Map<String, String> params)
{
perRequest(MIME_FORM_ENCODED, uri, user, pwd, aationHeaders, params, TYPE.POST);
}
/**
*
* @param contentType
* @param uri
* @param user
* @param pwd
* @param aationHeaders
* @param params
* @param type
*/
private void perRequest(String contentType, String uri, String user,
String pwd, final Map<String, String> aationHeaders,
final Map<String, String> params, TYPE type)
{
// 連接對象
DefaultHttpClient httpClient = new DefaultHttpClient();
if (null != user && null != pwd && !"".equals(user) && !"".equals(pwd))
{
// 身份驗證
httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(user, pwd));
}
// 設置頭參數
final Map<String, String> sendHeaders = new HashMap<String, String>();
if (aationHeaders != null && !aationHeaders.isEmpty())
{
sendHeaders.putAll(aationHeaders);
}
if (TYPE.POST == type)
{
// 設置消息類型
sendHeaders.put(CONTENT_TYPE, contentType);
}
if (!sendHeaders.isEmpty())
{
httpClient.addRequestInterceptor(new HttpRequestInterceptor()
{
@Override
public void process(HttpRequest request, HttpContext context)
throws HttpException, IOException
{
for (String key : sendHeaders.keySet())
{
if (!request.containsHeader(sendHeaders.get(key)))
{
request.addHeader(key, sendHeaders.get(key));
}
}
}
});
}
if (TYPE.POST == type)
{
HttpPost httpPost = new HttpPost(uri);
List<NameValuePair> nvps = null;
if (params != null && !params.isEmpty())
{
nvps = new ArrayList<NameValuePair>();
for (String key : params.keySet())
{
nvps.add(new BasicNameValuePair(key, params.get(key)));
}
}
if (nvps != null)
{
// post 參數
try
{
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
execute(httpClient, httpPost);
} else if (TYPE.GET == type)
{
execute(httpClient, new HttpGet(uri));
}
}
/**
*
* @param client
* @param method
*/
private void execute(HttpClient client, HttpRequestBase method)
{
try
{
client.execute(method, mResponseHandler);
} catch (ClientProtocolException e)
{
BasicHttpResponse errorRequest = new BasicHttpResponse(new ProtocolVersion("HTTP_ERROR", 1, 1), 500, "ERROR");
errorRequest.setReasonPhrase(e.toString());
try
{
mResponseHandler.handleResponse(errorRequest);
} catch (ClientProtocolException e1)
{
e1.printStackTrace();
} catch (IOException e1)
{
e1.printStackTrace();
}
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class HttpResponseHandler<T> implements ResponseHandler<T>
{
public HttpResponseHandler(int s)
{
}
@SuppressWarnings("unchecked")
@Override
public T handleResponse(HttpResponse response)
throws ClientProtocolException, IOException
{
T result = null;
if (response.getStatusLine().getStatusCode() == 200)
{
HttpEntity entity = response.getEntity();
result = (T) EntityUtils.toString(entity, HTTP.UTF_8);
Log.e("SFH",result.toString());
}
return result;
}
}
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable()
{
@Override
public void run()
{
new HttpHelper(new HttpResponseHandler<String>(0)).performGet("網絡地址", null, null, null);
}
}).start();
}
}
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.NameValuePair;
import org.apache.http.ProtocolVersion;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HttpContext;
public class HttpHelper
{
public static final String CONTENT_TYPE = "Content-Type";
/**使用HTTP的POST方法提交的表单*/
public static final String MIME_FORM_ENCODED = "application/x-www-form-urlencoded";
/**纯文本*/
public static final String MIME_TEXT_PLAIN = "text/plain";
/**HTML文档*/
public static final String MIME_TEXT_HTML = "text/html";
/**XHTML文档*/
public static final String MIME_XHTML = "application/xhtml+xml";
/**GIF图像*/
public static final String MIME_IMAGE_GIF = "image/gif";
/**JPEG图像*/
public static final String MIME_IMAGE_JPG = "image/jpeg";
/**PNG图像*/
public static final String MIME_IMAGE_PNG = "image/png";
/**MPEG动画*/
public static final String MIME_IMAGE_VIDEO = "video/mpeg";
/**任意的二进制数据*/
public static final String MIME_STREAM = "application/octet-stream";
/**PDF文档*/
public static final String MIME_PDF = "application/pdf";
/**Microsoft Word文件*/
public static final String MIME_WORD= "application/msword";
/**HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示*/
public static final String MIME_NATIVE = "multipart/alternative";
/**使用HTTP的POST方法提交的表单,但主要用于表单提交时伴随文件上传的场合*/
public static final String MIME_DATA = "multipart/form-data";
private final ResponseHandler<?> mResponseHandler;
public static enum TYPE
{
GET, POST
}
public HttpHelper(ResponseHandler<?> responseHandler)
{
mResponseHandler = responseHandler;
}
/**
*
* @param uri
* @param user
* @param pwd
* @param aationHeaders
*/
public void performGet(String uri, String user, String pwd,
final Map<String, String> aationHeaders)
{
perRequest(null, uri, user, pwd, aationHeaders, null, TYPE.GET);
}
/**
*
* @param contentType
* @param uri
* @param user
* @param pwd
* @param aationHeaders
* @param params
*/
public void performPost(String contentType, String uri, String user,
String pwd, final Map<String, String> aationHeaders,
final Map<String, String> params)
{
perRequest(contentType, uri, user, pwd, aationHeaders, params, TYPE.POST);
}
/**
*
* @param uri
* @param user
* @param pwd
* @param aationHeaders
* @param params
*/
public void performPost(String uri, String user, String pwd,
final Map<String, String> aationHeaders,
final Map<String, String> params)
{
perRequest(MIME_FORM_ENCODED, uri, user, pwd, aationHeaders, params, TYPE.POST);
}
/**
*
* @param contentType
* @param uri
* @param user
* @param pwd
* @param aationHeaders
* @param params
* @param type
*/
private void perRequest(String contentType, String uri, String user,
String pwd, final Map<String, String> aationHeaders,
final Map<String, String> params, TYPE type)
{
// 連接對象
DefaultHttpClient httpClient = new DefaultHttpClient();
if (null != user && null != pwd && !"".equals(user) && !"".equals(pwd))
{
// 身份驗證
httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(user, pwd));
}
// 設置頭參數
final Map<String, String> sendHeaders = new HashMap<String, String>();
if (aationHeaders != null && !aationHeaders.isEmpty())
{
sendHeaders.putAll(aationHeaders);
}
if (TYPE.POST == type)
{
// 設置消息類型
sendHeaders.put(CONTENT_TYPE, contentType);
}
if (!sendHeaders.isEmpty())
{
httpClient.addRequestInterceptor(new HttpRequestInterceptor()
{
@Override
public void process(HttpRequest request, HttpContext context)
throws HttpException, IOException
{
for (String key : sendHeaders.keySet())
{
if (!request.containsHeader(sendHeaders.get(key)))
{
request.addHeader(key, sendHeaders.get(key));
}
}
}
});
}
if (TYPE.POST == type)
{
HttpPost httpPost = new HttpPost(uri);
List<NameValuePair> nvps = null;
if (params != null && !params.isEmpty())
{
nvps = new ArrayList<NameValuePair>();
for (String key : params.keySet())
{
nvps.add(new BasicNameValuePair(key, params.get(key)));
}
}
if (nvps != null)
{
// post 參數
try
{
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
execute(httpClient, httpPost);
} else if (TYPE.GET == type)
{
execute(httpClient, new HttpGet(uri));
}
}
/**
*
* @param client
* @param method
*/
private void execute(HttpClient client, HttpRequestBase method)
{
try
{
client.execute(method, mResponseHandler);
} catch (ClientProtocolException e)
{
BasicHttpResponse errorRequest = new BasicHttpResponse(new ProtocolVersion("HTTP_ERROR", 1, 1), 500, "ERROR");
errorRequest.setReasonPhrase(e.toString());
try
{
mResponseHandler.handleResponse(errorRequest);
} catch (ClientProtocolException e1)
{
e1.printStackTrace();
} catch (IOException e1)
{
e1.printStackTrace();
}
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public class HttpResponseHandler<T> implements ResponseHandler<T>
{
public HttpResponseHandler(int s)
{
}
@SuppressWarnings("unchecked")
@Override
public T handleResponse(HttpResponse response)
throws ClientProtocolException, IOException
{
T result = null;
if (response.getStatusLine().getStatusCode() == 200)
{
HttpEntity entity = response.getEntity();
result = (T) EntityUtils.toString(entity, HTTP.UTF_8);
Log.e("SFH",result.toString());
}
return result;
}
}
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable()
{
@Override
public void run()
{
new HttpHelper(new HttpResponseHandler<String>(0)).performGet("網絡地址", null, null, null);
}
}).start();
}
}