高级开发

JAVA中使用Apache HttpComponents Client的进行GET/POST请求使用案例

宋兴柱 · 5月9日 · 2018年 · · 4886次已读

一、简述需求

  平时我们需要在JAVA中进行GET、POST、PUT、DELETE等请求时,使用第三方jar包会比较简单。常用的工具包有:

  1、https://github.com/kevinsawicki/http-request (对应Maven包:http://mvnrepository.com/artifact/com.github.kevinsawicki/http-request)

  2、http://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.5.5

  第1个包使用起来比较简单,如下:

package songxingzhu.utils.request;

import com.github.kevinsawicki.http.HttpRequest;

public class RequestUtils {
    private static final String defaultCharset = "utf-8";
    private static final int connectTimeoutInMissecond = 10000;
    private static final int readTimeoutInMissecond = 30000;

    public static RequestResult getJsonText(String url, String charset)  {
        if (charset == null) charset = defaultCharset;
        HttpRequest request = HttpRequest.get(url).connectTimeout(connectTimeoutInMissecond).readTimeout(readTimeoutInMissecond);
        String body = request.body(charset);
        int code = request.code();
        request.disconnect();
        return new RequestResult(body, code);
    }

}

 

  本文主要讲第2个包的使用。

二、开发过程

  如下图所示:

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

public class HttpClientTest {
    @Test
    public void get() throws IOException {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet request = new HttpGet("https://xingzhu-song.chinacloudsites.cn/kvMapping?orgId=b11647e8-0e36-44fd-84fa-262c4fcfbe43");
        request.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0");
        CloseableHttpResponse response = httpClient.execute(request);
        HttpEntity entry = response.getEntity();
        int code = response.getStatusLine().getStatusCode();
        System.out.println("\tcode:" + code);
        String result = EntityUtils.toString(entry);
        System.out.println("\tresult:" + result);
        HttpClientUtils.closeQuietly(response);
        HttpClientUtils.closeQuietly(httpClient);
    }

    @Test
    public void postForm() throws IOException {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost request = new HttpPost("https://xingzhu-song.chinacloudsites.cn/monitoring/metric/definitions");
        List<NameValuePair> list = new ArrayList<>();
        list.add(new BasicNameValuePair("orgId", "b11647e8-0e36-44fd-84fa-262c4fcfbe43"));
        list.add(new BasicNameValuePair("instanceId", "1b0acfbb-d7f2-4f0d-a026-734c686ee4ba"));
        request.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
        CloseableHttpResponse response = httpClient.execute(request);
        HttpEntity entry = response.getEntity();
        int code = response.getStatusLine().getStatusCode();
        System.out.println("\tcode:" + code);
        String result = EntityUtils.toString(entry);
        System.out.println("\tresult:" + result);
        HttpClientUtils.closeQuietly(response);
        HttpClientUtils.closeQuietly(httpClient);
    }

    @Test
    public void postJSON() throws IOException {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost request = new HttpPost("https://xingzhu-song.chinacloudsites.cn/kvMapping/valid?orgId=b11647e8-0e36-44fd-84fa-262c4fcfbe43");
        String body = "{" +
                "  \"serviceId\": \"pip\",\n" +
                "  \"key\": \"pipDnsLabel\",\n" +
                "  \"value\": \"abcdefg\",\n" +
                "  \"dependenceOn\": {\"pipLocation\":\"chinanorth\"}\n" +
                "}";
        request.setEntity(new StringEntity(body, "UTF-8"));
        request.setHeader("content-type", "application/json");
        CloseableHttpResponse response = httpClient.execute(request);
        HttpEntity entry = response.getEntity();
        int code = response.getStatusLine().getStatusCode();
        System.out.println("\tcode:" + code);
        String result = EntityUtils.toString(entry);
        System.out.println("\tresult:" + result);
        HttpClientUtils.closeQuietly(response);
        HttpClientUtils.closeQuietly(httpClient);
    }

    @Test
    public void testUrl() throws URISyntaxException {
        URIBuilder uriBuilder = new URIBuilder("https://xingzhu-song.chinacloudsites.cn");
        uriBuilder.setPath("kvMapping");
        uriBuilder.setCharset(Charset.forName("UTF-8"));
        uriBuilder.setParameter("key1", "value1");
        uriBuilder.setParameter("key2", "value2");
        //uriBuilder.setUserInfo("username","password"); //https://username:password@xingzhu-song.chinacloudsites.cn/kvMapping?key1=value1&key2=value2
        URI uri = uriBuilder.build();
        System.out.println(uri);//https://xingzhu-song.chinacloudsites.cn/kvMapping?key1=value1&key2=value2
    }
}

 

  

0 条回应