• 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项目结果:

            

  • 相关阅读:
    重写/覆盖基类的事件
    关于“日志”的输出控制
    WPF中DataGrid垂直滚动条滚动后导致每行CheckBox选择错乱
    WPF窗体应用程序开发
    C# 操作自定义config文件
    WPF绑定数据源之RelativeSource
    C# http请求 设置代理(标题可以作为搜索关键字)
    前端加载特效
    实现不同的项目,用不同的git 账号提交
    Casbin 使用记录
  • 原文地址:https://www.cnblogs.com/wnwn/p/12263477.html
Copyright © 2020-2023  润新知