首页 > 学院 > 开发设计 > 正文

HttpClient与HttpURLConnection网络请求工具类

2019-11-06 09:59:46
字体:
来源:转载
供稿:网友
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(); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表