JAVA淘淘商城项目我爱编程

HttpClient模仿浏览器调用服务

2018-05-20  本文已影响8人  WebGiser

1、什么是httpclient

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
下载地址:http://hc.apache.org/

2、功能介绍

以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。
(1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
(2)支持自动转向
(3)支持 HTTPS 协议
(4)支持代理服务器等

3、导入依赖

        <!-- httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.5</version>
        </dependency>

4、执行GET请求

客户端

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.Test;

public class HttpClientTest {
    @Test
    public void getTest() throws Exception {
       //创建一个httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        //创建一个uri对象
        URIBuilder uriBuilder = new URIBuilder("http://localhost:8082/httpclient/get.html");
        uriBuilder.addParameter("wd", "花千骨");
        HttpGet get = new HttpGet(uriBuilder.build());

        //执行请求
        CloseableHttpResponse response = httpClient.execute(get);

        //取响应的结果
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println(statusCode);
        HttpEntity entity = response.getEntity();
        String string = EntityUtils.toString(entity, "utf-8");
        System.out.println(string);

        //关闭httpclient
        response.close();
        httpClient.close();
    }
}

服务器端

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.nio.charset.Charset;

@Controller
public class HttpClientController {

    @ResponseBody
    @RequestMapping(value = "/httpclient/get",method = RequestMethod.GET)
    public String getTest(@RequestParam String wd){
        wd = new String(wd.getBytes(), Charset.forName("utf-8"));
        System.out.println(wd);
        return "success";
    }
}

5、执行post请求

客户端

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.HttpPost;
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.util.ArrayList;
import java.util.List;

public class HttpClientTest {

    @Test
    public void postTest() throws Exception{
        //创建一个httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        //创建一个post对象
        HttpPost post = new HttpPost("http://localhost:8082/httpclient/post.html");

        //创建一个Entity。模拟一个表单
        List<NameValuePair> kvList = new ArrayList<>();
        kvList.add(new BasicNameValuePair("username", "张三"));
        kvList.add(new BasicNameValuePair("password", "123"));

        //包装成一个Entity对象
        StringEntity entity = new UrlEncodedFormEntity(kvList, "utf-8");

        //设置请求的内容
        post.setEntity(entity);

        //执行post请求
        CloseableHttpResponse response = httpClient.execute(post);

        //取响应的结果
        String str = EntityUtils.toString(response.getEntity());
        System.out.println(str);

        //关闭httpclient
        response.close();
        httpClient.close();
    }
}

服务器端

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.nio.charset.Charset;

@Controller
public class HttpClientController {

    @ResponseBody
    @RequestMapping(value = "/httpclient/post",method = RequestMethod.POST)
    public String postTest(@RequestParam String username,@RequestParam String password){
        System.out.println(username+"---"+password);
        return "success";
    }
}
上一篇下一篇

猜你喜欢

热点阅读