1. 通過apache common封裝好的HttpClient


httpClient的get或post請求方式步驟:

  1. 生成一個HttpClient對象並設置相應的參數;
  2. 生成一個GetMethod對象或PostMethod並設置響應的參數;
  3. 用HttpClient生成的對象來執行GetMethod生成的Get方法;
  4. 處理響應狀態碼;
  5. 若響應正常,處理HTTP響應內容;
  6. 釋放連接。

導入如下jar包:

     <!--HttpClient-->
        <dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
        </dependency>
代碼如下:
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

import java.io.IOException;
import java.io.InputStream;

/**
 * @Author: Yang JianQiu
 * @Date: 2019/4/28 11:07
 *
 * HttpClient模擬get、post請求並發送請求參數(json等)
 * 【參考資料】
 * https://javasam.iteye.com/blog/2117845
 * https://blog.csdn.net/qq_28379809/article/details/82898792
 */
public class HttpClientToInterface {

    /**
     * httpClient的get請求方式
     * 使用GetMethod來訪問一個URL對應的網頁實現步驟:
     * 1.生成一個HttpClient對象並設置相應的參數;
     * 2.生成一個GetMethod對象並設置響應的參數;
     * 3.用HttpClient生成的對象來執行GetMethod生成的Get方法;
     * 4.處理響應狀態碼;
     * 5.若響應正常,處理HTTP響應內容;
     * 6.釋放連接。
     * @param url
     * @param charset
     * @return
     */
    public static String doGet(String url, String charset){
        /**
         * 1.生成HttpClient對象並設置參數
         */
        HttpClient httpClient = new HttpClient();
        //設置Http連接超時為5秒
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);

        /**
         * 2.生成GetMethod對象並設置參數
         */
        GetMethod getMethod = new GetMethod(url);
        //設置get請求超時為5秒
        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
        //設置請求重試處理,用的是默認的重試處理:請求三次
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());

        String response = "";

        /**
         * 3.執行HTTP GET 請求
         */
        try {
            int statusCode = httpClient.executeMethod(getMethod);

            /**
             * 4.判斷訪問的狀態碼
             */
            if (statusCode != HttpStatus.SC_OK){
                System.err.println("請求出錯:" + getMethod.getStatusLine());
            }

            /**
             * 5.處理HTTP響應內容
             */
            //HTTP響應頭部信息,這里簡單打印
            Header[] headers = getMethod.getResponseHeaders();
            for (Header h: headers){
                System.out.println(h.getName() + "---------------" + h.getValue());
            }
            //讀取HTTP響應內容,這里簡單打印網頁內容
            //讀取為字節數組
            byte[] responseBody = getMethod.getResponseBody();
            response = new String(responseBody, charset);
            System.out.println("-----------response:" + response);
            //讀取為InputStream,在網頁內容數據量大時候推薦使用
            //InputStream response = getMethod.getResponseBodyAsStream();

        } catch (HttpException e) {
            //發生致命的異常,可能是協議不對或者返回的內容有問題
            System.out.println("請檢查輸入的URL!");
            e.printStackTrace();
        } catch (IOException e){
            //發生網絡異常
            System.out.println("發生網絡異常!");
        }finally {
            /**
             * 6.釋放連接
             */
            getMethod.releaseConnection();
        }
        return response;
    }

    /**
     * post請求
     * @param url
     * @param json
     * @return
     */
    public static String doPost(String url, JSONObject json){
        HttpClient httpClient = new HttpClient();
        PostMethod postMethod = new PostMethod(url);

        postMethod.addRequestHeader("accept", "*/*");
        postMethod.addRequestHeader("connection", "Keep-Alive");
        //設置json格式傳送
        postMethod.addRequestHeader("Content-Type", "application/json;charset=utf-8");
        //必須設置下面這個Header
        postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
        //添加請求參數
        postMethod.addParameter("commentId", json.getString("commentId"));

        String res = "";
        try {
            int code = httpClient.executeMethod(postMethod);
            if (code == 200){
                res = postMethod.getResponseBodyAsString();
                System.out.println(res);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return res;
    }

    public static void main(String[] args) {
        doGet("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", "UTF-8");
        System.out.println("-----------分割線------------");
        System.out.println("-----------分割線------------");
        System.out.println("-----------分割線------------");

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("commentId", "13026194071");
        doPost("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", jsonObject);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM