JAVA的http請求幾種方式

http訪問是java經常使用的。一般有三種請求方式。

  1. java原生的HttpURLConnection
  2. HTTPClient3(commons-httpclient) 第三方框架
  3. HTTPClient4.5(apache.httpclient)

HttpURLConnection傳入參數用OutputStream(傳參使用aa=bb樣式),取返回值用InputStream,請求頭setRequestProperty()

public static void doPost(String url){
        HttpURLConnection connection = null;
        String params = "param=zhangsan";
        try {
            URI uri = new URI(url);
            connection = (HttpURLConnection)uri.toURL().openConnection();
            //設置講求時長
            connection.setConnectTimeout(2000);
            //設置讀的時間
            connection.setReadTimeout(1000);
            //get請求傳入GET
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type","application/json;charset=UTF-8");
            //設置是否將數據寫入鏈接
            connection.setDoOutput(true);
            OutputStream outputStream = connection.getOutputStream();
            outputStream.write(params.getBytes());
            outputStream.flush();
            outputStream.close();

            //發起請求
            connection.connect();

            if(connection.getResponseCode() == 200){
                InputStream inputStream = connection.getInputStream();
                byte[] bytes = new byte[1024];
                inputStream.read(bytes);
                System.out.println(new String(bytes,"utf-8"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

httpClient3.1請求頭使用setRequestHeader(),參數使用addParameter(),返回值還是使用InputStream

public static void doPost(String url, Map<String, String> params) {
        //創建HttpClient實例
        HttpClient httpClient = new HttpClient();
        //設置httpClient連接主機服務器的超時時間
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(2000);
        //創建Post請求方法實例
        PostMethod post = new PostMethod(url);
        post.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
        //設置Post請求時長
        post.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 2000);

        post.addParameter("param", "lisi");
        try {
            int statuCode = httpClient.executeMethod(post);
            if (200 == statuCode) {
                InputStream responseBodyAsStream = post.getResponseBodyAsStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(responseBodyAsStream));
                String team = null;
                while ((team = bufferedReader.readLine()) != null) {
                    System.out.println(team);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

httpClient4.5請求頭使用setHeader(),傳入參數使用setEntity(),返回參數又進行了封裝直接使用httpResponse.getEntity()

public static void doPost(String url, Map<String, String> params) {
        //通過默認配置創建個HttpClient實例
        CloseableHttpClient client = HttpClients.createDefault();
        CloseableHttpResponse httpResponse = null;
        //創建httpPost遠程實例
        HttpPost post = new HttpPost(url);
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(2000)//連接主機服務超時時間
                .setConnectionRequestTimeout(2000)//連接請求超時時間
                .setSocketTimeout(2000)//讀取數據超時時間
                .build();
        //爲httpPost實例設置配置(get請求httpGet)
        post.setConfig(requestConfig);
        //設置請求頭
        post.setHeader("Content-Type", "application/json;charset=UTF-8");

        //迭代請求參數map
        List<NameValuePair> nvps = new ArrayList<>();
        params.forEach((m, v) -> {
            nvps.add(new BasicNameValuePair(m, v));
        });

        //爲httpPost設置封裝好的請求參數
        try {
            post.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        try {
            //httpClient對象執行Post請求,並返回響應對象
            httpResponse = client.execute(post);
            HttpEntity entity = httpResponse.getEntity();
            System.out.println(EntityUtils.toString(entity));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 關閉資源
            if (null != httpResponse) {
                try {
                    httpResponse.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != client) {
                try {
                    client.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

在java中url和uri的區別?
uri:表示統一資源標識符引用
url:和般表示網絡資源
url = uri.toUrl()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章