java使用okhttp庫實現Authorization認證請求

<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.9.1</version>
</dependency>
import okhttp3.*;
import org.apache.log4j.Logger;
import java.io.IOException;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;

public class HttpUtil {
    static public OkHttpClient client;

    static private Logger logger = Logger.getLogger(HttpUtil.class);

    static {

        client = new OkHttpClient.Builder()

                .connectTimeout(10000L, TimeUnit.MILLISECONDS)

                .readTimeout(10000L, TimeUnit.MILLISECONDS)

                .build();

    }

    /**
     47
     * 同步GET請求 帶Authorization認證
     48
     */

    public static String okhttp_get(String get_url, HashMap<String, Object> get_data, String[] auth_base){


        final String credential = Credentials.basic(auth_base[0], auth_base[1]);

        String result = "";

        String data_params = generateParameters(get_data);

        String data_url = get_url + data_params;

        Request request = new Request.Builder()

                .url(data_url)

                .header("Authorization", credential)

                .get()

                .build();

        Call call = client.newCall(request);

        try {

            Response response = call.execute();

            //判斷是否成功
            if (response.isSuccessful()){
                result = response.body().string();
            }else {
                return "請求失敗";
            }
            logger.debug(result);


        } catch (Exception e) {

            logger.error("網絡GET請求失敗!提示信息:"+e.getMessage());

        }

        return result;

    }
    /**
     * Post請求 帶Authorization認證
     * */
    public static String okhttp_post(String get_url, HashMap<String, Object> get_data, String[] auth_base){

        final String credential = Credentials.basic(auth_base[0], auth_base[1]);

        String result = "";

        RequestBody fromBody = generateParametersForPost(get_data).build();


        Request request = new Request.Builder()

                .url(get_url)

                .header("Authorization", credential)

                .post(fromBody)

                .build();

        Call call = client.newCall(request);

        try {

            Response response = call.execute();

            //判斷是否成功
            if (response.isSuccessful()){
                result = response.body().string();
            }else {
                return "請求失敗";
            }
            logger.debug(result);


        } catch (Exception e) {

            logger.error("網絡GET請求失敗!提示信息:"+e.getMessage());

        }

        return result;

    }

    //拼接參數

    private static String generateParameters(HashMap<String, Object> parameters) {

        String urlAttachment = "";

        if(parameters.size()>0){

            urlAttachment = "?";

            Object[] keys = parameters.keySet().toArray();

            for(Object key : keys)

            urlAttachment += key.toString() + "=" + parameters.get(key).toString() + "&";

            urlAttachment = urlAttachment.substring(0,urlAttachment.length()-1);
        }

        return urlAttachment;
    }

    //拼接參數用於POST請求

    private static FormBody.Builder generateParametersForPost(HashMap<String, Object> parameters) {

        FormBody.Builder builder = new FormBody.Builder();

        if(parameters.size()>0){
            Object[] keys = parameters.keySet().toArray();

            for(Object key : keys){
                Object ff = parameters.get(key);
                String aa = parameters.get(key).toString();

                builder.add(key.toString(),parameters.get(key).toString());
            }
        }

        return builder;
    }

    /**
     * 發送私密API請求
     *
     * @paramget_url請求地址
     * @paramget_data 請求參數列表
     * @return          返回JSON數據
     */
    private String auth_get(){
        String result = "";
        String api_key = "apikey";
        String api_secret = "apisecret";
        //認證信息
        String[] baseauth = {api_key,api_secret};
        //請求的URL的參數
        HashMap<String, Object> get_data = new HashMap<>();
        get_data.put("page","1");       //page參數
        get_data.put("name","test");  //name參數
        result = HttpUtil.okhttp_get("http://www.superl.org/page-about.html", get_data, baseauth);
        return result;
}


}
相關文章
相關標籤/搜索