Java 实现Post 请求传递对象和Get请求(HttpURLConnection实现)

1.GET 请求

public static String doGet(String httpurl,String contentType) {
        //contentType = "application/json";
        contentType = "text/xml";
        HttpURLConnection connection = null;
        InputStream is = null;
        BufferedReader br = null;
        String result = null;// 返回结果字符串
        try {
            // 创建远程url连接对象
            URL url = new URL(httpurl);
            // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
            connection = (HttpURLConnection) url.openConnection();
            // 设置连接方式:get
            connection.setRequestMethod("GET");
            // 设置连接主机服务器的超时时间:15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取远程返回的数据时间:60000毫秒
            connection.setReadTimeout(60000);
            connection.setRequestProperty("Content-Type",contentType);
            connection.setRequestProperty("Content-Length","0");
            // 发送请求
            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);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } 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();// 关闭远程连接
        }

        return result;
    }

2.POST 请求传递对象

用fastjon做处理

在pom.xml引入fastjson的依赖

<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.70</version>
</dependency>
public static String doPost(String httpUrl,Object param) {

        HttpURLConnection connection = null;
        InputStream is = null;
        OutputStream out = null;
        BufferedReader br = null;
        String result = null;
        try {
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开连接
            connection = (HttpURLConnection) url.openConnection();
            // 设置连接请求方式
            connection.setRequestMethod("POST");
            // 设置连接主机服务器超时时间:15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取主机服务器返回数据超时时间:60000毫秒
            connection.setReadTimeout(60000);

            // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
            connection.setDoOutput(true);
            // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
            connection.setDoInput(true);
            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
            connection.setRequestProperty("Content-Type", "application/json");
            // 设置鉴权信息:Authorization: Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0
            //connection.setRequestProperty("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
            // 通过连接对象获取一个输出流
            out = connection.getOutputStream();
            // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
            //os.write(param.getBytes());
            //JSONObject obj = new JSONObject();
            // java.net.URLEncoder.encode 编码之后会有%多余%的问题,在传输的过程中无法被解析
            // String json = java.net.URLEncoder.encode(obj.toString(), "utf-8");
            Object o = JSONObject.toJSON(param);
            Object jsonObject = JSONObject.parse(o.toString());
            out.write(jsonObject.toString().getBytes());


            // 通过连接对象获取一个输入流,向远程读取
            if (connection.getResponseCode() == 200) {

                is = connection.getInputStream();
                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 断开与远程地址url的连接
            connection.disconnect();
        }
        return result;
    }

3.GET 请求传递时候参数有时候需要做Encode编码

url = url + "?msgTypeCode="+URLEncoder.encode(msgTypeCode)+"&userCode="+URLEncoder.encode(userCode)+"&current="+current+"&size="+size;

 

热门文章

暂无图片
编程学习 ·

安卓扫描车牌识别的功能SDK

安卓扫描车牌识别的功能SDK 为了缓解停车压力,在不影响道路使用的情况下,很多地方都在道路上划出一部分停车位,来供车主使用,此之为占道停车。目前国内路边占道停车主要是使用咪表、地磁、手持终端及人工的方式进行管理和收费。对于占道停车管理来说,在手机端集成一个优秀…
暂无图片
编程学习 ·

Linux 练习 - 文本处理三剑客之AWK

1、文件 ip_list.txt 如下格式,请提取 ”.solin.com” 前面的主机名部分并写入到回到该文件中 1 blog.solin.com 2 www.solin.com … 999 study.solin.com [root@centos7 ~]# awk -F "[ .]" {print $2} ip_list.txt >> ip_list.txt2、统计 /etc/fstab 文件中每…
暂无图片
编程学习 ·

Ubuntu 18.04安装docker-compose

安装docker-compose之前先安装docker环境可以参照我的文章https://blog.csdn.net/weixin_42608885/article/details/106859553#安装依赖工具 $ sudo apt-get install python-pip -y #安装编排工具 $ sudo pip install docker-compose #查看版本 $ sudo docker-compose version
暂无图片
编程学习 ·

记一次spark-submi 提交python脚本 遇到的问题

一、通过spark-submit 提交报错如下 yarn运行模式spark用的版本是2.4.0是支持pandas_udf的,而且通过pyspark的shell命令行一条条执行 都是没有问题的 但是将代码作为文件用spark submit提交就报这个错误 二、解决办法: @pandas_udf(returnType=“string”, PandasUDFType.…
暂无图片
编程学习 ·

带你全面了解蓝牙定位原理,蓝牙定位方案种类-新导智能

蓝牙定位服务是蓝牙技能领域增加最快的解决方案,现在已经被越来越多的运用于寻物、室内定位、室内导航以及财物追寻等领域。蓝牙联盟也在不断的迭代蓝牙技能,使得定位技能的精度越来越高,从最早的朴实基于信号强度的Beacon定位,到蓝牙5.1支撑的多天线视点定位等。从方案视点…
暂无图片
编程学习 ·

windows 搭建es 集群 使用cerebro

1.2.一次修改三个节点下配置文件具体操作:主节点nodecluster.name: my-applicationnode.name: nodenode.master: truenode.attr.rack: r1network.host: 127.0.0.1http.port: 9200transport.tcp.port: 9300discovery.seed_hosts: ["127.0.0.1:9300","127.0.0.1:…
暂无图片
编程学习 ·

ant design of vue,form自定义校验

<a-form-item label="产品特性" class="am-enter_form_item"><a-select mode="tags"class="am-enter-select"placeholder="选择或填写2~4个标签(限制2~4个字)"showArrow:max-tag-count="4":max-tag-te…
暂无图片
编程学习 ·

04 | 如何处理消费过程中的重复消息?

1.应用场景见: https://blog.csdn.net/william_n/article/details/1040254082.学习/操作2.1 阅读文档你好,我是李玥。上节课我们讲了如何确保消息不会丢失,课后我给你留了一个思考题,如果消息重复了怎么办?这节课,我们就来聊一聊如何处理重复消息的问题。在消息传递过程中…
暂无图片
编程学习 ·

支付宝支付回调,回调日志记录

1、支付报支付回调方法public function aliPayNotify(){try {$app = PayService::alipay();$collect = $app->verify();$collectData = $collect->all();//获取支付宝回调参数$this->writeAliPayLog($collectData, true);if ($collectData[trade_…
暂无图片
编程学习 ·

Kotlin上手(一)

标准函数with with函数接收两个参数,第一个参数是任意类型的对象,第二个是Lambda表达式。with函数会在Lambda表达式中提供第一个参数的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。 fun test() {val list = listOf("Apple", "Banana", &…
暂无图片
编程学习 ·

React基本使用 - props与state、React事件

1、props 父组件传过来的参数 可以使用组件类的defaultProps属性,设置默认的props值 // Actor.js import React,{Component} from react; export default class Actor extends Component{render(){return (<div>hi, {this.props.name} - {this.props.works}</div>…
暂无图片
编程学习 ·

数的范围

给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。 如果数组中不存在该元素,则返回“-1 -1”。 输入格式 第一行包含整数n和q,表示数组长度和询问个数。 第二行包含n个整数(均在1~10000范围…
暂无图片
编程学习 ·

快手2020校园招聘秋招笔试--工程B试卷

攻击者使用无效IP地址,利用TCP连接的三次握手过程,连续发送会话请求,使受害主机处于开放会话的请求之中,直至连接超时,最终因耗尽资源而停止响应。这种攻击被称为A. DNS欺骗攻击 B. DDoS攻击 C. SYN Flooding攻击 D. 重放攻击DNS欺骗攻击:DNS(Domin Name Sever)是域名服…
暂无图片
编程学习 ·

SpringBooot框架整合MyBatis框架

SpringBooot框架整合MyBatis框架 1.MyBatis框架概述 Mybatis是一个优秀的持久层框架,底层基于JDBC实现与数据库的交互。并在JDBC操作的基础上做了封装和优化,它借助灵活的SQL定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展 2.初始配置 2.1.在pom.xml文件中…
暂无图片
编程学习 ·

Python电影票房数据可视化分析基础实践

数据可视化一直是很多数据分析或者是建模挖掘任务里面经常会用到的一项功能,今天我们基于某电影网站中公开发布的电影票房数据进行一些基础的数据可视化分析实践,下面是部分的数据样例:叶问.,20160304,33151,2193,196.9万,33.96%,46 捉妖记,20150718,17860,995,192.71万,64.…
暂无图片
编程学习 ·

高并发下的redis击穿,你需要了解下布隆过滤器

在高并发读的情况下缓存是不可少的。关于高并发缓存方面大小可以参考博主这篇文章 好了接下来进入正题:大家看下上方的这幅图,用户可能进行了一次条件错误的查询,这时候 redis 是不存在的,按照常规流程就是去数据库找了,可是这是一次错误的条件查询,数据库当然也不会存在,…
暂无图片
编程学习 ·

微信小程序中常见的几种授权

微信小程序中常见的几种授权:代码下载地址:https://download.csdn.net/download/weixin_39152200/12569931 压缩包中包含两个文件:authorize.js和md5.js 使用方法: 将这两个文件放到utils目录中,在需要使用的页面js文件中引入 let authorize = require(../../utils/autho…
暂无图片
编程学习 ·

斯坦福 CS183 系列中文笔记

欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。在线阅读 ApacheCN 面试求职交流群 724187166 ApacheCN 学习资源目录Zero to One 从0到1 | Tony翻译版Ch1: The Challenge of the Future Ch2: Party like it’s 1999 Ch3: All happy companies are diff…
暂无图片
编程学习 ·

比特币协会圆满举办两届BSV编程马拉松,多个团队脱颖而出,荣获奖金及投资

活动时间:2019年5月4日-5月5日、2019年8月17日-8月19日 活动主办方:比特币协会 活动合作方:CoinGeek 活动评审:nChain2019年,比特币协会举办了两场线上虚拟编程马拉松,这是针对开发者的限时的编程比赛,参赛者都是为了赢得丰厚的奖金池。在编程马拉松期间,参赛者的任务是…