文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

httpclient发送Get请求和Post请求

2023-09-15 13:39

关注

创建HttpClient发送请求、接收响应

Get请求简介

构建一个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对象即可

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请求简介

post携带JSON参数

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

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工具类

来源地址:https://blog.csdn.net/weixin_42274846/article/details/127669296

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯