需要更多色彩的
不是代码,而是生活

Android通过HttpURLConnection发送get与post请求

package com.codezd.zdchat;

import android.util.Log;

import org.apache.commons.io.IOUtils;

import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;

public class Util {

    public static void sendGetRequest(final String requestUrl) {
        HashMap<String, String> map = new HashMap<>();
        sendGetRequest(requestUrl, map);
    }

    /**
     * 发送get请求
     *
     * @param requestUrl 请求路径
     * @param paramsMap  请求参数
     */
    public static void sendGetRequest(final String requestUrl, final HashMap<String, String> paramsMap) {
        // 实现runnable借口,创建多线程并启动
        new Thread(new Runnable() {
            @Override
            public void run() {
                new Util().getRequestHandler(requestUrl, paramsMap);
            }
        }) {
        }.start();
    }

    /**
     * get请求处理方法
     *
     * @param requestUrl
     * @param paramsMap
     */
    private void getRequestHandler(String requestUrl, HashMap<String, String> paramsMap) {
        try {
            //合成参数
            StringBuilder tempParams = new StringBuilder();
            int pos = 0;
            for (String key : paramsMap.keySet()) {
                if (pos > 0) {
                    tempParams.append("&");
                }
                tempParams.append(String.format("%s=%s", key, URLEncoder.encode(paramsMap.get(key), "utf-8")));
                pos++;
            }
            String requestUrlParam = requestUrl + tempParams.toString();
            //新建一个URL对象
            URL url = new URL(requestUrlParam);
            //打开一个HttpURLConnection连接
            HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
            // 设置连接主机超时时间
            urlConn.setConnectTimeout(30 * 1000);
            //设置从主机读取数据超时
            urlConn.setReadTimeout(30 * 1000);
            //设置是否使用缓存  默认是true
            urlConn.setUseCaches(true);
            //设置为GET请求
            urlConn.setRequestMethod("GET");
            //设置请求中的媒体类型信息。
            urlConn.setRequestProperty("Content-Type", "application/json");
            //开始连接
            urlConn.connect();
            if (urlConn.getResponseCode() == 200) {
                String result = IOUtils.toString(urlConn.getInputStream(), StandardCharsets.UTF_8);
                Log.i("codezd", result);
            } else {
                Log.e("codezd", "Get方式请求失败");
            }
            //关闭连接
            urlConn.disconnect();
        } catch (Exception e) {
            Log.e("codezd", e.toString());
        }
    }


    /**
     * 发送post请求
     *
     * @param requestUrl 请求路径
     * @param paramsMap  请求参数
     */
    public static void sendPostRequest(final String requestUrl, final HashMap<String, String> paramsMap) {
        // 实现runnable借口,创建多线程并启动
        new Thread(new Runnable() {
            @Override
            public void run() {
                new Util().postRequestHandler(requestUrl, paramsMap);
            }
        }) {
        }.start();
    }

    /**
     * post请求处理方法
     *
     * @param requestUrl
     * @param paramsMap
     */
    private void postRequestHandler(String requestUrl, HashMap<String, String> paramsMap) {
        try {
            //合成参数
            StringBuilder tempParams = new StringBuilder();
            int pos = 0;
            for (String key : paramsMap.keySet()) {
                if (pos > 0) {
                    tempParams.append("&");
                }
                tempParams.append(String.format("%s=%s", key, URLEncoder.encode(paramsMap.get(key), "utf-8")));
                pos++;
            }
            String params = tempParams.toString();
            //请求的参数转换为byte数组
            byte[] postData = params.getBytes();
            //新建一个URL对象
            URL url = new URL(requestUrl);
            //打开一个HttpURLConnection连接
            HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
            //设置连接超时时间
            urlConn.setConnectTimeout(30 * 1000);
            //设置从主机读取数据超时
            urlConn.setReadTimeout(30 * 1000);
            //Post请求必须设置允许输出 默认false
            urlConn.setDoOutput(true);
            //设置请求允许输入 默认是true
            urlConn.setDoInput(true);
            //Post请求不能使用缓存
            urlConn.setUseCaches(false);
            //设置为Post请求
            urlConn.setRequestMethod("POST");
            //设置本次连接是否自动处理重定向
            urlConn.setInstanceFollowRedirects(true);
            //配置请求Content-Type
            urlConn.setRequestProperty("Content-Type", "application/json");
            //开始连接
            urlConn.connect();
            //发送请求参数
            DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
            dos.write(postData);
            dos.flush();
            dos.close();
            //判断请求是否成功
            if (urlConn.getResponseCode() == 200) {
                //获取返回的数据
                String result = IOUtils.toString(urlConn.getInputStream(), StandardCharsets.UTF_8);
                Log.i("codezd", result);
            } else {
                Log.e("codezd", "Post方式请求失败");
            }
            //关闭连接
            urlConn.disconnect();
        } catch (Exception e) {
            Log.e("codezd", e.toString());
        }
    }
}
赞(1) 打赏
未经允许不得转载:代码一线 » Android通过HttpURLConnection发送get与post请求
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就支持一下本站

支付宝扫一扫打赏

微信扫一扫打赏