Java中实现Http请求并获取响应数据

摘要:
默认返回当前年度的所有信息。

目录
前言
  • 在演示的功能代码中使用的请求http地址为:http://timor.tech/api/holiday/year/

    接口说明:获取指定年份或年月份的所有节假日信息。默认返回当前年份的所有信息。

    跳转链接:免费节假日 API

  • 以上功能代码仅在使用GET请求方式时测试通过,POST等其他请求时请自行尝试。

  • 因未设置请求头时也成功获取了响应数据,所以未在演示代码中添加请求头信息,请求失败时可自行添加请求头信息后重试

方式一:功能实现类 java.net.HttpURLConnection

请求实现代码:

package com.zhiyin.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MyTest {
    public static void main(String[] args) {
        test();
    }

    // HttpURLConnection方式
    public static void test() {
        String SUBMIT_METHOD_GET = "GET";  // 一定要是大写,否则请求无效

        String urlStr = "http://timor.tech/api/holiday/year/";  // 请求http地址
        String param = "2020";  // 请求参数

        HttpURLConnection connection = null;
        InputStream is = null;
        BufferedReader br = null;
        String result = null;  // 返回结果字符串
        try {
            // 创建远程url连接对象
            URL url = new URL(urlStr);
            // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
            connection = (HttpURLConnection) url.openConnection();
            // 设置连接方式:GET
            connection.setRequestMethod(SUBMIT_METHOD_GET);
            // 设置连接主机服务器的超时时间:15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取远程返回的数据时间:60000毫秒
            connection.setReadTimeout(60000);
            // 发送请求
            connection.connect();
            // 通过connection连接,请求成功后获取输入流
            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // 封装输入流is,并指定字符集
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                // 存放数据
                StringBuffer sbf = new StringBuffer();
                String temp = null;
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                }
                result = sbf.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            connection.disconnect();  // 关闭远程连接
        }
        System.out.println("Successfully:" + result);
    }
}
方式二:功能实现类 org.apache.http.client.methods.HttpGet

maven项目中pom.xml文件里引入依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

请求实现代码:

package com.zhiyin.test;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.InputStream;

public class MyTest {
    public static void main(String[] args) {
        test();
    }

    // HttpGet方式
    public static void test() {
        try {
            String urlStr = "http://timor.tech/api/holiday/year/";  // 请求http地址
            String param = "2020";  // 请求参数

            // 模拟(创建)一个浏览器用户
            CloseableHttpClient client = HttpClients.createDefault();
            HttpGet httpGet = new HttpGet(urlStr + param);
            // httpclient进行连接
            CloseableHttpResponse response = client.execute(httpGet);
            // 获取内容
            HttpEntity entity = response.getEntity();
            // 将内容转化成IO流
            InputStream content = entity.getContent();
            // 输入流转换成字符串
            byte[] byteArr = new byte[content.available()];
            content.read(byteArr);  // 将输入流写入到字节数组中
            String result = new String(byteArr);
            System.out.println("Successfully:" + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

免责声明:文章转载自《Java中实现Http请求并获取响应数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) (转)Innocent Grey和Noesis社GalGame工具下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

asp.net关键字模糊查询(类似于各大网站搜索功能)

  今天与大家分享一个小算法,我是用C#写的,其他语言也一样换下语法就行了。以空格断开关键字模糊查询,类似于各大网站的搜索功能。我想的就是一个拼接sql语句的过程。都是以空格断开关键字,分两种情况,一种是以空格断开是”且”的关系,另一种是以空格断开是”或”的关系。其实也很简单,直接上代码吧。   关键字"或"的关系代码: /// <summary&g...

jquery datatable 参数

DataTables(http://www.datatables.net/)应该是我到目前为止见过的,功能最强大的表格解决方案(当然,不计算其它整套框架中的table控件在内)。 先把它主页上写的特性翻译罗列如下: 可变长度分页;动态过滤;多列排序,带数据类型检测功能;列宽度的智能处理;从多种数据源获取数据(DOM,js Array, ajax file,...

linux下搭建lamp环境以及安装swoole扩展

一、CentOS 6.5/CentOS 6.9使用yum快速搭建LAMP环境 准备工作:先更新一下yum源  我安装的环境是:apache2.2.15+mysql5.5.60+php5.6.36 输入下面命令: yum -y update 1、安装Apache [root@localhost ~]# yum -y install httpd # 开机自启动...

Jackson 通过自定义注解来控制json key的格式

Jackson 通过自定义注解来控制json key的格式 最近我这边有一个需求就是需要把Bean中的某一些特殊字段的值进行替换。而这个替换过程是需要依赖一个第三方的dubbo服务的。为了使得这个转换功能更加的通用,我们采用了下面的方式: client端使用自定义的注解(假设为@Dimension)标记Bean中所有的「特殊字段」 client端把bea...

数据基本类型以及相关举例

数据基本类型: 整型:字节型byte 短整型short  整型int  浮点类型:长整形long  浮点型  fioat   双精度性double  字符型:char  布尔型:boolean   引用类型( reference): 类class   接口interface   数据  array     循环:for   while      do wh...

java与json互相转换(解决日期问题)

JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本文主要讲解下java和JSON之间的转换,特别是解决互相转换遇到日期问题的情况。 一、需要相关的jar包: json-lib-xxx.jar ezmorph-xxx.jar c...