当前位置: 首页 > news >正文

JAVA实现HTTP请求

目前JAVA实现HTTP请求的方法用的最多的有两种:

一种是通过HTTPClient这种第三方的开源框架去实现。HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,HttpClient3.1 是 org.apache.commons.httpclient下操作远程 url的工具包,虽然已不再更新,但实现工作中使用httpClient3.1的代码还是很多,HttpClient4.5是org.apache.http.client下操作远程 url的工具包,最新的;

另一种则是通过HttpURLConnection去实现,HttpURLConnection是JAVA的标准类,是JAVA比较原生的一种实现方式。

公司用的第二种HttpURLConnection,该方式返回数据是String类型,接收后需要用 JsonUtil.getObject(resultStr, ResultInfo.class);获取json对象

in.readLine()得到的就是返回值,不需要循环就行:
 public static String sendPost(String serverUrl, String param, String charsetName, String contentType) {
        ResultInfo resultInfo = null;
        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            long t1 = System.currentTimeMillis();
            URL url = new URL(serverUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);    // 可以发送数据
            conn.setDoInput(true);    // 可以接收数据
            conn.setRequestMethod("POST");    // POST方法
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            // 必须注意此处需要设置UserAgent,否则google会返回403
            conn.setRequestProperty
                    ("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
            if(contentType != null){
                conn.setRequestProperty("Content-Type", contentType);
            }
            if (charsetName != null) {
                conn.setRequestProperty("Accept-Charset", charsetName);
                conn.setRequestProperty("contentType", charsetName);
            }
            conn.setConnectTimeout(HttpUtils.TIMEOUT);
            conn.setReadTimeout(HttpUtils.TIMEOUT_MAX);
            conn.connect();
            // 写入的POST数据
            OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream(), charsetName);
            osw.write(param);
            osw.flush();
            osw.close();

            // 读取响应数据
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), charsetName));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            long t2 = System.currentTimeMillis() - t1;
            logger.info("发送 POST 请求serverUrl={},param={},耗时:{}", serverUrl, param, t2);
        } catch (Exception e) {
            logger.error("发送 POST 请求出现异常!serverUrl={},param={}", serverUrl, param, e);
        }finally{
            try{
                if(out!=null){
                    out.close();
                }
                if(in!=null){
                    in.close();
                }
            }
            catch(IOException ex){
                logger.error("异常信息=", ex);
            }
        }

        return result;
    }

 

 

 

转载于:https://www.cnblogs.com/zhaoyanhaoBlog/p/11508957.html

相关文章:

  • 顺序存储结构与链式存储结构
  • Apache Kafka(九)- Kafka Consumer 消费行为
  • xray写POC踩坑
  • 对 Watchbog Botnet 渗透过程和 Payload 的分析
  • c++ 初学者 慢慢成长中
  • max pool实现
  • Kafka Stream 以及其他流处理框架对比
  • cpp 面向对象初步探索
  • cpp 实现简易String类
  • Apache Kafka(十)Partitions与Replication Factor 调整准则
  • 蒜头君的购物袋1、蒜头君的购物袋2-(01背包)
  • vue页面传参
  • SSM框架-Spring
  • 端口扫描
  • js 条件方法、数组方法
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 230. Kth Smallest Element in a BST
  • Apache的80端口被占用以及访问时报错403
  • CentOS7简单部署NFS
  • Java Agent 学习笔记
  • JAVA 学习IO流
  • node学习系列之简单文件上传
  • 关于使用markdown的方法(引自CSDN教程)
  • 记一次和乔布斯合作最难忘的经历
  • 排序算法之--选择排序
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 设计模式走一遍---观察者模式
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 微信开源mars源码分析1—上层samples分析
  • 我从编程教室毕业
  • 我感觉这是史上最牛的防sql注入方法类
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (6)添加vue-cookie
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Java)【深基9.例1】选举学生会
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (新)网络工程师考点串讲与真题详解
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • ?php echo ?,?php echo Hello world!;?
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @Transactional类内部访问失效原因详解
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [AIGC] MySQL存储引擎详解
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [BROADCASTING]tensor的扩散机制
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [C++进阶篇]STL中vector的使用
  • [iOS]-网络请求总结
  • [JS]Math.random()随机数的二三事
  • [LeetCode][LCR190]加密运算——全加器的实现