HttpClient

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

        HTTP和浏览器有点像,但却不是浏览器。很多人觉得既然HttpClient是一个HTTP客户端编程工具,很多人把他当做浏览器来理解,但是其实HttpClient不是浏览器,它是一个HTTP通信库,因此它只提供一个通用浏览器应用程序所期望的功能子集,最根本的区别是HttpClient中没有用户界面,浏览器需要一个渲染引擎来显示页面,并解释用户输入,例如鼠标点击显示页面上的某处,有一个布局引擎,计算如何显示HTML页面,包括级联样式表和图像。javascript解释器运行嵌入HTML页面或从HTML页面引用的javascript代码。来自用户界面的事件被传递到javascript解释器进行处理。除此之外,还有用于插件的接口,可以处理Applet,嵌入式媒体对象(如pdf文件,Quicktime电影和Flash动画)或ActiveX控件(可以执行任何操作)。HttpClient只能以编程的方式通过其API用于传输和接受HTTP消息。

结构

  

模拟GET请求

  导入依赖

 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.2</version>
    </dependency>

  执编写HttpClient类

public class HttpClient {


    public static void main(String[] args) throws IOException {
        //GET请求
        Get();
    }

    //模拟GET请求
    public static void Get() throws IOException {
        //创建连接
        CloseableHttpClient client = HttpClients.createDefault();
        //创建一个请求
        HttpGet httpGet=new HttpGet("https://www.baidu.com/");
        //执行请求获取响应的结果
        CloseableHttpResponse response = client.execute(httpGet);
        //获取响应的状态码
        int code = response.getStatusLine().getStatusCode();
        System.out.println("服务器返回的状态码:"+code);
        //服务器正常响应
        if (code==200){
            //获取响应结果
            String s = EntityUtils.toString(response.getEntity(), "UTF-8");
            System.out.println(s);
        }
        //关闭连接
        response.close();
        client.close();
    }

}

  执行的结果

      

模拟POST请求

  接收post请求类

      相当于服务器,结构如下:

        

    导入依赖   

 <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    编写Httpservlet类

@WebServlet("/httpServlet")
public class HttpServlet extends javax.servlet.http.HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println("信息:"+username);
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().write("服务器接收数据!");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
}

  编写HttpClient类

public class HttpClient {


    public static void main(String[] args) throws IOException {
        //post请求
        Post();
    }//模拟post请求
    public static void Post() throws IOException {
        //创建连接
        CloseableHttpClient client = HttpClients.createDefault();
        //创建请求
        HttpPost httpPost=new HttpPost("http://localhost:8083/httpServlet");
        //创建参数队列
        List<NameValuePair> pairList=new ArrayList<>();
        pairList.add(new BasicNameValuePair("username","wn"));
        //创建请求体,封装数据
        UrlEncodedFormEntity entity=new UrlEncodedFormEntity(pairList,"UTF-8");
        //将请求体发送给当前请求
        httpPost.setEntity(entity);
        //发送请求,接收结果
        CloseableHttpResponse response=client.execute(httpPost);
        String s = EntityUtils.toString(response.getEntity(), "UTF-8");
        System.out.println(s);
        //关闭资源
        response.close();
        client.close();
    }

}

  执行结果

    httpClient项目结果:

        

    servlet项目结果:

        

原文地址:https://www.cnblogs.com/wnwn/p/12263477.html