package Utils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
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.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import android.text.TextUtils;
import android.util.Log;
/**
* HttpClient与HttpURLConnection 网络请求
*
* @author android.mtj 在Android6.0版本直接删除了HttpClient类库,如果仍想使用则解决方法是
* 1、如果使用的是eclipse则在libs中加入org.apache.http.legacy.jar
* 这个jar包在:**sdk\platforms\android-23\optional目录中(需要下载android 6.0的SDK)
* 2、 如果使用的是android studio则 在相应的module下的build.gradle中加入:
*
* android { useLibrary 'org.apache.http.legacy' }
*/
public class HttpRequestUtils {
private static HttpRequestUtils mHttpUtils;
/**
* 获取实例
*
* @return
*/
public static HttpRequestUtils getInstance() {
if (mHttpUtils == null) {
mHttpUtils = new HttpRequestUtils();
}
return mHttpUtils;
};
/**
* 创建HttpGet 请求
*
* @param url
* 请求地址
*/
public String useHttpClientGet(String url) {
String result = "";
HttpGet mHttpGet = new HttpGet(url);
mHttpGet.addHeader("Connection", "Keep-Alive");
try {
HttpClient mHttpClient = createHttpClient();
HttpResponse mHttpResponse = mHttpClient.execute(mHttpGet);
HttpEntity mHttpEntity = mHttpResponse.getEntity();
// int code = mHttpResponse.getStatusLine().getStatusCode();
if (null != mHttpEntity) {
InputStream mInputStream = mHttpEntity.getContent();
result = converStreamToString(mInputStream);
mInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
Log.i("mtj", "result== "+result);
return result;
}
/**
* 创建HttpPost 请求
*
* @param url
* 请求地址
* @param map
* 请求参数
*/
public String useHttpClientPost(String url, Map<String, String> map) {
String result = "";
HttpPost mHttpPost = new HttpPost(url);
mHttpPost.addHeader("Connection", "Keep-Alive");
try {
HttpClient mHttpClient = createHttpClient();
List<NameValuePair> postParams = new ArrayList<NameValuePair>();
// 要传递的参数
for (Map.Entry<String, String> entry : map.entrySet()) {
postParams.add(new BasicNameValuePair(entry.getKey(), entry
.getValue()));
}
mHttpPost.setEntity(new UrlEncodedFormEntity(postParams));
HttpResponse mHttpResponse = mHttpClient.execute(mHttpPost);
HttpEntity mHttpEntity = mHttpResponse.getEntity();
// int code = mHttpResponse.getStatusLine().getStatusCode();
if (null != mHttpEntity) {
InputStream mInputStream = mHttpEntity.getContent();
result = converStreamToString(mInputStream);
mInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
Log.i("mtj", "result== "+result);
return result;
}
/**
* 创建HttpUrlConnectionPost 请求
*
* @param url
* 请求地址
* @param map
* 请求参数
* @return
*/
public String useHttpUrlConnectionPost(String url, Map<String, String> map) {
String result = "";
InputStream mInputStream = null;
HttpURLConnection mHttpURLConnection = getHttpURLConnection(url, "POST");
try {
List<NameValuePair> post = new ArrayList<NameValuePair>();
// 要传递的参数
for (Map.Entry<String, String> entry : map.entrySet()) {
post.add(new BasicNameValuePair(entry.getKey(), entry
.getValue()));
}
postParams(mHttpURLConnection.getOutputStream(), post);
mHttpURLConnection.connect();
mInputStream = mHttpURLConnection.getInputStream();
// int code = mHttpURLConnection.getResponseCode();
result = converStreamToString(mInputStream);
mInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
Log.i("mtj", "result== "+result);
return result;
}
/**
* 创建HttpUrlConnectionGet 请求
*
* @param url
* 请求地址
* @return
*/
public String useHttpUrlConnectionGet(String url) {
String result = "";
InputStream mInputStream = null;
HttpURLConnection mHttpURLConnection = getHttpURLConnection(url, "GET");
try {
mHttpURLConnection.connect();
mInputStream = mHttpURLConnection.getInputStream();
// int code = mHttpURLConnection.getResponseCode();
result = converStreamToString(mInputStream);
mInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
Log.i("mtj", "result== "+result);
return result;
}
// 创建HttpClient
private HttpClient createHttpClient() {
HttpParams mDefaultHttpParams = new BasicHttpParams();
// 设置连接超时
HttpConnectionParams.setConnectionTimeout(mDefaultHttpParams, 15000);
// 设置请求超时
HttpConnectionParams.setSoTimeout(mDefaultHttpParams, 15000);
HttpConnectionParams.setTcpNoDelay(mDefaultHttpParams, true);
HttpProtocolParams.setVersion(mDefaultHttpParams, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(mDefaultHttpParams, HTTP.UTF_8);
// 持续握手
HttpProtocolParams.setUseExpectContinue(mDefaultHttpParams, true);
HttpClient mHttpClient = new DefaultHttpClient(mDefaultHttpParams);
return mHttpClient;
}
// 将请求结果转换成String类型
private String converStreamToString(InputStream is) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuffer sb = new StringBuffer();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
String respose = sb.toString();
return respose;
}
// 创建HttpURLConnection
// requestMethod == POST / GET
private static HttpURLConnection getHttpURLConnection(String url,
String requestMethod) {
HttpURLConnection mHttpURLConnection = null;
try {
URL mUrl = new URL(url);
mHttpURLConnection = (HttpURLConnection) mUrl.openConnection();
// 设置链接超时时间
mHttpURLConnection.setConnectTimeout(15000);
// 设置读取超时时间
mHttpURLConnection.setReadTimeout(15000);
// 设置请求参数
mHttpURLConnection.setRequestMethod(requestMethod);
// 添加Header
mHttpURLConnection.setRequestProperty("Connection", "Keep-Alive");
// 接收输入流
mHttpURLConnection.setDoInput(true);
// 传递参数时需要开启
mHttpURLConnection.setDoOutput(true);
} catch (IOException e) {
e.printStackTrace();
}
return mHttpURLConnection;
}
// 因为我们要发送POST请求,所以在UrlConnManager类中再写一个postParams()方法
// 用来组织一下请求参数并将请求参数写入到输出流中
private void postParams(OutputStream output, List<NameValuePair> paramsList)
throws IOException {
StringBuilder mStringBuilder = new StringBuilder();
for (NameValuePair pair : paramsList) {
if (!TextUtils.isEmpty(mStringBuilder)) {
mStringBuilder.append("&");
}
mStringBuilder.append(URLEncoder.encode(pair.getName(), "UTF-8"));
mStringBuilder.append("=");
mStringBuilder.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
output, "UTF-8"));
writer.write(mStringBuilder.toString());
writer.flush();
writer.close();
}
}
HttpClient与HttpURLConnection网络请求工具类
最新推荐文章于 2024-03-28 03:46:12 发布