• httpClient请求案例


    package com.client.example;
    
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.CookieStore;
    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.methods.HttpUriRequest;
    import org.apache.http.client.protocol.HttpClientContext;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.BasicCookieStore;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.impl.client.LaxRedirectStrategy;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    import org.testng.annotations.AfterClass;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Test;
    
    import java.io.IOException;
    import java.net.URLEncoder;
    import java.nio.charset.Charset;
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class httpClient {
        public static CloseableHttpClient httpClient = null;
    
        @BeforeClass
        public static void setUpBeforeClass() {
            httpClient = HttpClients.createDefault();
        }
    
        @AfterClass
        public static void tearDownAfterClass() throws IOException {
            httpClient.close();
        }
    
    
        /**
         * 发送get请求
         *
         * @throws ClientProtocolException
         * @throws IOException
         */
        @Test
        public void Get() throws ClientProtocolException, IOException {
            String userName = "method=loginMobile&loginname=test1&loginpass=test1";
            userName = URLEncoder.encode( userName,"utf-8" );
            String url = "http://118.24.13.38:8080/goods/UserServlet?"+ userName ;
            System.out.println( "请求地址:" + url );
            HttpGet get = new HttpGet( url );
            CloseableHttpResponse res = httpClient.execute( get );
            try {
                int statusCode = res.getStatusLine().getStatusCode(); // 获得状态行的状态码的信息
                System.out.println( statusCode );
                String resBody = EntityUtils.toString( res.getEntity() );// 获得响应的http
                System.out.println( resBody );
            } finally {
                res.close();
            }
        }
    
        /**
         * 发送post请求
         *
         * @throws ClientProtocolException
         * @throws IOException
         */
        @Test
        public void Post() throws ClientProtocolException, IOException {
            HttpPost post = new HttpPost( "http://118.24.13.38:8080/goods/UserServlet?" );
            // UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters,"utf-8");
            List<NameValuePair> list = new ArrayList<>(); // 将请求数据加入到此list中
            list.add( new BasicNameValuePair( "method", "loginMobile" ) );
            list.add( new BasicNameValuePair( "loginname", "test1" ) );
            list.add( new BasicNameValuePair( "loginpass", "test1" ) );
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity( list, Charset.forName( "utf-8" ) ); // 根据数据构造请求body部分
            post.setEntity( entity );
    
            CloseableHttpResponse res = httpClient.execute( post );// 发送请求
            try {
                int statusCode = res.getStatusLine().getStatusCode();
                // 得到响应的状态码
                System.out.println( statusCode );
                // 得到响应的内容
                String resBody = EntityUtils.toString( res.getEntity() );
                System.out.println( resBody );
            } finally {
                res.close();
            }
        }
    
        /**
         * get与重定向
         *
         * @throws ClientProtocolException
         * @throws IOException
         */
        @Test
        public void getAndRedirect() throws ClientProtocolException, IOException {
            String username = "test&f=an";
            username = URLEncoder.encode( username, "utf-8" );
            String url = "http://101.200.167.51:8080/http/method?redirect=true&username=" + username
                    + "&pwd=testfan111&cars=volvo";
            System.out.println( url );
            HttpGet httpGet = new HttpGet( url );
            CloseableHttpResponse res = httpClient.execute( httpGet );
            try {
                int statusCode = res.getStatusLine().getStatusCode();// 获得状态行的状态码的信息
                System.out.println( statusCode );
                String resBody = EntityUtils.toString( res.getEntity() );// 获得响应的http
                // body部分
                System.out.println( "=====" + resBody );
            } finally {
                res.close();
            }
        }
    
    
        /**
         * 手动实现跟随重定向
         *
         * @throws ClientProtocolException
         * @throws IOException
         */
        @Test
        public void postAndRedirect() throws ClientProtocolException, IOException {
            httpClient = HttpClients.createDefault();// 通过这个方法创建的httpclient,只能手工模拟重定向过程:即先发起post请求,然后发起get请求
            HttpPost post = new HttpPost( "http://101.200.167.51:8080/http/method?redirect=true" );
            // UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters,
            // "utf-8");
            List<NameValuePair> paramList = new ArrayList<>();// 将请求数据加入到此list中
            paramList.add( new BasicNameValuePair( "username", "ykp" ) );
            paramList.add( new BasicNameValuePair( "pwd", "123456" ) );
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity( paramList, Charset.forName( "utf-8" ) );// 根据数据构造请求body部分
            post.setEntity( entity );
            CloseableHttpResponse res = httpClient.execute( post );// 发送请求
            String location = null;
            try {
                int statusCode = res.getStatusLine().getStatusCode();
                System.out.println( statusCode );
                location = res.getFirstHeader( "Location" ).getValue();
            } finally {
                res.close();
            }
            HttpGet httpGet = new HttpGet( location );
            CloseableHttpResponse redictRes = httpClient.execute( httpGet );
            try {
                int statusCode = redictRes.getStatusLine().getStatusCode();// 获得状态行的状态码的信息
                System.out.println( statusCode );
                String resBody = EntityUtils.toString( redictRes.getEntity() );// 获得响应的http
                // body部分
                System.out.println( resBody );
            } finally {
                res.close();
            }
        }
    
    
        /**
         * 跟随重定向
         *
         * @throws ClientProtocolException
         * @throws IOException
         */
        @Test
        public void postAndAutoRedirect() throws ClientProtocolException, IOException {
            httpClient = HttpClients.custom().setRedirectStrategy( new LaxRedirectStrategy() ).build();// 通过这个方法创建的httpclient,设置自动跟随重定向
            HttpPost post = new HttpPost( "http://101.200.167.51:8080/http/method?redirect=true" );
            // UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters,
            // "utf-8");
            List<NameValuePair> paramList = new ArrayList<>();// 将请求数据加入到此list中
            paramList.add( new BasicNameValuePair( "username", "ykp" ) );
            paramList.add( new BasicNameValuePair( "pwd", "123456" ) );
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity( paramList, Charset.forName( "utf-8" ) );// 根据数据构造请求body部分
            post.setEntity( entity );
            CloseableHttpResponse res = httpClient.execute( post );// 发送请求
            try {
                int statusCode = res.getStatusLine().getStatusCode();
                System.out.println( statusCode );
                String resBody = EntityUtils.toString( res.getEntity() );// 获得响应的http
                // body部分
                System.out.println( resBody );
            } finally {
                res.close();
            }
        }
    
        /**
         * 如何向服务器发送json格式的数据
         *
         * @throws ClientProtocolException
         * @throws IOException
         */
        @Test
        public void postJson() throws ClientProtocolException, IOException {
            HttpPost post = new HttpPost( "http://101.200.167.51:8080/http/method1" );
            String requestContent = "{'id':1,'name':'Yan Kunpeng','email':'testst@sina.com','birthday':{'birthday':'19850101'},'regDate':'2015-07-07 11:35:08'}";
            StringEntity entity = new StringEntity( requestContent, "utf-8" );// 如果是xml或json请求数据,那么通过StringEntity构造请求数据,同时设置字符集
            entity.setContentType( "application/json" );// 告诉服务器请求内容的类型
            post.setEntity( entity );
            CloseableHttpResponse res = httpClient.execute( post );// 发送请求
            try {
                int statusCode = res.getStatusLine().getStatusCode();
                System.out.println( statusCode );
                String resBody = EntityUtils.toString( res.getEntity() );
                System.out.println( resBody );
            } finally {
                res.close();
            }
        }
    
        /**
         * 如何向服务器发送xml格式的数据
         *
         * @throws ClientProtocolException
         * @throws IOException
         */
        @Test
        public void postXml() throws ClientProtocolException, IOException {
            HttpPost post = new HttpPost( "http://101.200.167.51:8080/http/method1" );
            String requestContent =
                    "<?xml version='1.0' encoding='ISO-8859-1'?><note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>";
            StringEntity entity = new StringEntity( requestContent, "utf-8" );// 如果是xml或json请求数据,那么通过StringEntity构造请求数据,同时设置字符集
            entity.setContentType( "application/xml" );// 告诉服务器请求内容的类型
            post.setEntity( entity );
            CloseableHttpResponse res = httpClient.execute( post );// 发送请求
            try {
                int statusCode = res.getStatusLine().getStatusCode();
                System.out.println( statusCode );
                String resBody = EntityUtils.toString( res.getEntity() );
                System.out.println( resBody );
            } finally {
                res.close();
            }
        }
    
    
        /**
         * 带有token验证信息的表单:如何提取表单中token,获得token后才能在提交表单时带上token
         *
         * @throws ClientProtocolException
         * @throws IOException
         */
        @Test
        public void postFormWithToken() throws ClientProtocolException, IOException {
            HttpClientContext context = HttpClientContext.create();
            CookieStore cookieStore = new BasicCookieStore();// 创建cookie存储器,存储cookie信息
            context.setCookieStore( cookieStore );// context目的是保存各种配置信息,包括cookiestore
            HttpGet httpGet = new HttpGet( "http://101.200.167.51:8080/http/tokenForm" );
            CloseableHttpResponse res = httpClient.execute( httpGet, context );// 执行请求的时候,会通过context中的cookiestore进行cookie保存。
            String token = null;
            try {
                String resBody = EntityUtils.toString( res.getEntity() );// 获得响应的http
                // body部分
                System.out.println( resBody );
                // <input type="hidden" name="_token"
                // value="6c45hpvfbpt2clcdfrw6j5okv4ocearo">
                int t1 = resBody.indexOf( "_token" ) + 15;// 找到value="的双引号的位置
                int t2 = resBody.indexOf( """, t1 ); // 找到token后面的双引号的位置
                token = resBody.substring( t1, t2 );// 截取token
                System.out.println( token );
            } finally {
                res.close();
            }
            HttpPost post = new HttpPost( "http://101.200.167.51:8080/http/tokenForm" );
            List<NameValuePair> paramList = new ArrayList<>();// 将请求数据加入到此list中
            paramList.add( new BasicNameValuePair( "_token", token ) );//
            paramList.add( new BasicNameValuePair( "username", "ykp" ) );
            paramList.add( new BasicNameValuePair( "pwd", "123456" ) );
            UrlEncodedFormEntity entity = new UrlEncodedFormEntity( paramList, Charset.forName( "utf-8" ) );// 根据数据构造请求body部分
            post.setEntity( entity );
            CloseableHttpResponse postres = httpClient.execute( post, context );// 发送请求,帶上cookie信息
            try {
                int statusCode = postres.getStatusLine().getStatusCode();
                System.out.println( statusCode );
                String resBody = EntityUtils.toString( postres.getEntity() );
                System.out.println( resBody );
            } finally {
                postres.close();
            }
        }
    }
    

      

      

      

      

      

  • 相关阅读:
    列表与数组 Perl入门第三章
    北京地区-医类汇总
    via/route blockage/size blockage/wire/pin guide/pin blockage/partition
    dbGet(三)
    dbGet(二.一)hinst
    微服务是什么?
    Docker入门 四 Swarms集群
    Docker入门 三 用服务来扩展和负载均衡你的应用
    Linux2.2路径、删除目录及文件
    Linux2.1系统目录结构、ls、文件类型、alias
  • 原文地址:https://www.cnblogs.com/Alexr/p/9360753.html
Copyright © 2020-2023  润新知