httpclient发送Get请求和Post请求

2023-10-26

Get请求简介

  • 1). 创建HttpClient对象,可以使用HttpClients.createDefault()
  • 2). 如果是无参数的GET请求,则直接使用构造方法HttpGet(String url)创建HttpGet对象即可;
  • 3)如果是带参数GET请求,则可以先使用URIBuilder(String url)创建对象,再调用addParameter(Stringparam, String value)`, 或setParameter(String param, String)
    value)来设置请求参数,并调用build()方法构建一个URI对象。
  • 4). 创建HttpResponse,调用HttpClient对象的execute(HttpUriRequest
    request)发送请求,该方法返回一个HttpResponse。调用HttpResponse的getAllHeaders()、getHeaders(String
    name)等方法可获取服务器的响应头;
  • 5)调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。通过调用getStatusLine().getStatusCode()可以获取响应状态码。
  • 6). 释放连接。

构建一个Maven项目,引入如下依赖

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

get无参数

如果是无参数的GET请求,则直接使用构造方法HttpGet(String url)创建HttpGet对象即可

/**
 *普通的GET请求
 */
public class DoGET {
    public static void main(String[] args) throws Exception {
        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();
        // 创建http GET请求
        HttpGet httpGet = new HttpGet("http://www.baidu.com");
        CloseableHttpResponse response = null;
        try {
            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                //请求体内容
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                //内容写入文件
                FileUtils.writeStringToFile(new File("E:\\devtest\\baidu.html"), content, "UTF-8");
                System.out.println("内容长度:"+content.length());
            }
        } finally {
            if (response != null) {
                response.close();
            }
            //相当于关闭浏览器
            httpclient.close();
        }
    }
}

get有参数

如果是带参数GET请求,则可以先使用URIBuilder(String url)创建对象,再调用addParameter(Stringparam, String value)

public class HttpclientTest {
    @Test
    public void httpGet() throws IOException {
        // 1.创建httpclient
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //2. 创建HttpGet,设置URL访问地址
        String urlTest = "https://XXXX/XXX/shopping/platformInfo?platformid=7";
        HttpGet httpGet = new HttpGet(urlTest);
        // 3. 请求执行,获取响应
        CloseableHttpResponse response = httpClient.execute(httpGet);
        //解析响应
        if (response.getStatusLine().getStatusCode() == 2000) {
            String content = EntityUtils.toString(response.getEntity(), "UTF-8");
            System.out.println(content.length());
        }
        // 4.获取响应实体
        HttpEntity entity = response.getEntity();
        System.out.println(EntityUtils.toString(entity, "utf-8"));
        response.close();
        httpClient.close();
    }

代码中使用的是公司接口,请求URL前缀就XXX表示了,get请求如图所示
运行结果:我们已经看到get接口成功返回一条数据
在这里插入图片描述

Post请求简介

  • 1). 创建HttpClient对象,可以使用HttpClients.createDefault();
  • 2). 如果是无参数的POST请求,则直接使用构造方法HttpPost(String url)创建HttpPost对象即可;
  • 3)如果是带参数POST请求,先构建HttpEntity对象并设置请求参数,然后调用setEntity(HttpEntityentity)创建HttpPost对象。
  • 4). 创建HttpResponse,调用HttpClient对象的execute(HttpUriRequest
    request)发送请求,该方法返回一个HttpResponse。调用HttpResponse的getAllHeaders()、getHeaders(String
    name)等方法可获取服务器的响应头;
  • 5)调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。通过调用getStatusLine().getStatusCode()可以获取响应状态码。
  • 6). 释放连接。

post携带JSON参数

如果是带JSON参数POST请求,先构建HttpEntity对象并设置请求参数,因为我们的参数是JSON格式的,需要将请求对象转换成string类型的,然后调用setEntity(HttpEntityentity)创建HttpPost对象
首先我们先创建一个请求实体类PostData,代码如图所示

/**
 * @param
 * @author wcy
 * @create 2022/10/15
 * @return
 * @description
 **/
public class PostData {
    private String categoryid;
    private int currentPage;
    private String end_time;
    private int pageSize;
    private int platformid;
    private String start_time;
    private int step_id;

    public String getCategoryid() {
        return categoryid;
    }

    public void setCategoryid(String categoryid) {
        this.categoryid = categoryid;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public String getEnd_time() {
        return end_time;
    }

    public void setEnd_time(String end_time) {
        this.end_time = end_time;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getPlatformid() {
        return platformid;
    }

    public void setPlatformid(int platformid) {
        this.platformid = platformid;
    }

    public String getStart_time() {
        return start_time;
    }

    public void setStart_time(String start_time) {
        this.start_time = start_time;
    }

    public int getStep_id() {
        return step_id;
    }

    public void setStep_id(int step_id) {
        this.step_id = step_id;
    }
}
  @Test
    public void httpPost() throws IOException {
        // 1.创建httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
//         2.创建post对象,设置URL访问地址
        String url = "https://XxX/XxX/shopping/goodsRank";
        HttpPost httpPost = new HttpPost(url);
        CloseableHttpResponse response = null;
        try {
            PostData data = new PostData();
            data.setCategoryid("");
            data.setCurrentPage(1);
            data.setEnd_time("2022-11-02");
            data.setPageSize(20);
            data.setPlatformid(1);
            data.setStart_time("2022-11-02");
            data.setStep_id(464);
            String bodyEntity = JSON.toJSONString(data);
            HttpEntity entity = new StringEntity(bodyEntity, ContentType.APPLICATION_JSON);
            httpPost.setEntity(entity);
            //发送post请求
            response = httpClient.execute(httpPost);
            //解析响应
            if (response.getStatusLine().getStatusCode() == 200) {
                //获取响应数据
                entity = response.getEntity();
                System.out.println(EntityUtils.toString(entity, "utf-8"));
            }
        }catch (IOException e){
           e.printStackTrace();
        }
   }

运行结果:
在这里插入图片描述

post携带表单参数

post请求传递参数的形式是将参数放入表单请求体中,然后将表单对象放入请求体中传递。

//1.获得一个httpclient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
//2.生成一个post请求
HttpPost httpPost = new HttpPost("http://www.baidu.com/");
//3.请求参数添加到请求体中,表单提交
List<NameValuePair> nvpList = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair(key, val));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nvps, charset);
httpPost.setEntity(formEntity);
//4.执行get请求并返回结果
CloseableHttpResponse response = httpclient.execute(httpPost);
try {
    //5.处理结果响应体
    HttpEntity entity = response.getEntity();
} finally {
    response.close();
}

postman自动生成OKhttp代码

首先在postman编写好post请求的URL,请求参数,请求方式,请求头
在这里插入图片描述
点击sends按钮右侧的code弹窗展示,如图所示
在这里插入图片描述
框里面的代码就是自动生成的,我们可以复制代码到idea中,需要在maven`装下OKhhtp的依赖
官网连接:https://mvnrepository.com/

     OkHttpClient client = new OkHttpClient().newBuilder()
                .build();
        MediaType mediaType = MediaType.parse("text/plain");
        RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                .addFormDataPart("categoryid","")
                .addFormDataPart("currentPage","1")
                .addFormDataPart("end_time ","2022-11-01")
                .addFormDataPart("pageSize","20")
                .addFormDataPart("platformid ","1")
                .addFormDataPart("start_time ","2022-11-01")
                .addFormDataPart("step_id ","464")
                .build();
        Request request = new Request.Builder()
                .url("https://XXX/XXX/shopping/goodsRank")
                .method("POST", body)
                .addHeader("Cookie", "laravel_session=eyJpdiI6IkRxcWx6M201UHRWMWFWeDY3b0RURmc9PSIsInZhbHVlIjoid0pSM241cmgvRUk5WndHTnc2azlzNFpHVDh6MCt5R1pSV21pQXRPRDB1eEpyMThNZVUrelRKYzJHSVUzNHp3T290RHppOVNvSFZ3Z2VCQ2g4SEFQUjBXSGpRL3VkcUJiRUFzRGc5b21BRnhOUUwzUkNENlhzUEJlVGtWZkhZNGoiLCJtYWMiOiIyYzM1NDhkYzQ0YmZiNjQ5OWIwZjg1NDA3NTYxZTcyM2IyODAxNWI1ZGU4NmEzOTE2YjRmOTBjYzQzMzUyNjY1In0%3D")
                .build();
        Response response = client.newCall(request).execute();
        System.out.println(response);
    }

OKhttp的语法跟httpclient差不多,都是http工具类

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

httpclient发送Get请求和Post请求 的相关文章

随机推荐

  • golang context使用reflect遍历获取所有的key和value

    golang中我们经常和context打交道 context实际上可以保存值 源码参见 usr local go src context context go context包中实际上有好几种私有的context类型 type emptyC
  • SpringCache笔记

    SpringCache 一 简介 1 缓存介绍 Spring 从 3 1 开始就引入了对 Cache 的支持 定义了 org springframework cache Cache 和 org springframework cache C
  • Python中float类型、float32类型和float64类型的表示精度,所需内存及其之间的转换

    1 表示精度和所需内存 float类型和float64类型是一样的 都需要64个bits 而float32需要32个bits 精度方面 float类型和float64类型在十进制中可以有16位 而float32类型在十进制中有8位 如下 g
  • 哔哩哔哩 API

    常用查看技巧 UP主所有视频 https www bilibili com medialist play 这里写uid from space 最新投稿的视频 https www bilibili com newlist html API 参
  • 完美解决Missing artifact com.oracle:ojdbc6:jar:11.2.0.4

    今天运行Tomcat项目时 在加载maven依赖的时候报了Missing artifact com oracle ojdbc6 jar 11 2 0 4的错 意思是说我缺少了com oracle ojdbc6 jar 11 2 0 4的依赖
  • 基于axios的二次封装

    1 axios的封装前言 axios是一个基于 promise 的 HTTP 库 目前 在vue react框架中也还是备受青睐 根据不同项目的业务 也有许多种不同的封装方法 但不同的应用场景 导致封装的代码风格不一 我这里想总结下封装的思
  • IDEA项目及字体样式和初始化等习惯配置

    前言 内容较多 按需检索 0 IDEA常用快捷键 1 主题设置 黑白 2 字体大小设置 3 全局编码 字符集改为utf 8 3 1 文件编码设置 3 2 新建项目字符集设置 3 3 单个文件编码设置 idea面板右下角 4 Maven配置
  • 如何设置环境变量

    首先强烈推荐一款免费的c 的IDE code block 免费的且自带了MinGW编译器 自己可以设置字体及大小 一般设置成12号比较合适 直接在界面上的Setting gt Editor 在右上角上有一个choose 然后就可以选择字体
  • 书城管理系统(前端)

    OK 兄弟们 测试上传图片的后端接口 测试分页条件查询后端接口 测试根据id查询后端接口 测试新增一本书的后端接口 测试修改一本书的后端接口 之前写好的后端接口 用postman测试一下 没有问题的话我们就试试开发前端 准备工作 用vue创
  • MYSQL 时间处理

    1 MySQL 获得当前时间戳函数 current timestamp current timestamp mysql gt select current timestamp current timestamp current timest
  • BERT使用过程中的碰到的那些报错

    BERT是谷歌2018年提出的语言模型 在十几个任务上达到了state of art 在这里本人在使用过程中总结了一下遇到的错误 BERT推荐在TPU上运行 但是资源有限在GPU上跑也行 不行也能在cpu上跑 ps就是有些慢 官方BERT的
  • RPA机器人成为金融银行业转型的重要推手

    当前 金融科技迅猛发展 金融业监管和合规要求不断提升 为了应对挑战 抓住机遇 银行业作为国民经济体系重要的组成部分和核心产业 早已开始探索科技赋能金融之路 当前银行业面临的难题 成熟的银行都会在其内部部署多个业务平台 管理系统 以实现业务流
  • arduino控制步进电机

    一 实物连接 二 代码实现 const int IN1 11 const int IN2 10 const int IN3 9 const int IN4 8 正转顺序 const char tab1 0x01 0x03 0x02 0x06
  • 【spring源码探索】一分钟搞懂RefreshScope的作用及实现原理

    前文 下述文章完全为个人阅读源码的随笔记录 如有错误 欢迎大家指出 过程 过程很坎坷 而且大家应该都不想看了吧 简而言之就是先写个测试DEMO 然后各种DEBUG 结论 这次先直接上结论 然后再通过测试DEMO给出验证 最后再去跟代码 Re
  • 怎样在Android访问php取回json数据

    1 代码 php代码 1 array array 2 username gt 杨铸 3 password gt 123456 4 user id gt 1 5 6 echojson encode array 2 代码 java代码 01 p
  • C语言算平均数,让用户输入一系列的正整数,输入-1表示输入结束,算出这些数字的平均数

    include
  • JAVA怎么替换html标签呢???

    之前遇见个需求 让我在下载文件时 把content里面的富文本存储的内容下载下来 但是又不能有html标签 那个我们怎们处理呢 废话不多说 上代码 StringBuffer stringBuffer new StringBuffer Str
  • Android10.0 Binder通信原理(七)-Framework binder示例

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • 幸有一事,生死可许

    已然到了岁末 2014就要结束 迎来崭新的2015 颇多感慨 颇多难忘 与其说是2014年是我职业生涯中至关重要的一年 倒不如说是我人生道路上极为重要的一步来的更为贴切 这一年忙忙碌碌 一刻不得清闲 却是极为充实 没有迷茫 没有挣扎 有的只
  • httpclient发送Get请求和Post请求

    创建HttpClient发送请求 接收响应 Get请求简介 get无参数 get有参数 Post请求简介 post携带JSON参数 post携带表单参数 postman自动生成OKhttp代码 Get请求简介 1 创建HttpClient对