文档章节

JAVA HTTP请求工具类

ge洋
 ge洋
发布于 2017/09/12 13:52
字数 842
阅读 197
收藏 2

JAVA新手,在项目中应用到的工具,进行简单的总结,随便写写,有不对希望大神指正,谢谢....

在开发项目中, 如果需要进行跨域请求,都会涉及到在代码中实现HTTP的请求访问.

(百度过许多次都没有发现比较简单的方法,所以就简单整理一下)

这里以Maven项目为例进行讲解:

    除其他配置外还需要Maven包:

   

<!-- 发送HTTP请求 -->
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/fluent-hc -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>fluent-hc</artifactId>
    <version>4.5.3</version>
</dependency>

<!-- net.sf.json.JSONObject 相关jsOn转化 -->
<dependency>    
    <groupId>net.sf.json-lib</groupId>    
    <artifactId>json-lib</artifactId>    
    <version>2.4</version>    
    <classifier>jdk15</classifier>    
</dependency> 

请求工具代码如下:

package com.wx.tool;


import org.apache.http.client.fluent.Request;
import org.apache.http.client.fluent.Response;

import net.sf.json.JSONObject;


public class HttpUtil {

    /**
     * <p>方法说明: HTTP POST 请求
     * <p>编码格式: UTF8
     * <p>参数说明: String urL 请求的路径
     * <p>参数说明: String parAms 请求的参数
     * <p>返回说明: JSONObject
     * */
    public static JSONObject doPost(String url, String params) throws Exception {
        Request request = Request.Post(url);
        request.bodyByteArray(params.getBytes("UTF8"));
        Response response = request.execute();
        String jsonData = response.returnContent().asString();
        
        /* 转化为 JSONObject 数据 */
        JSONObject json = JSONObject.fromObject(jsonData);
        return json;
    }
    
    /**
     * <p>方法说明: HTTP GET 请求
     * <p>编码格式: UTF8
     * <p>参数说明: String urL 请求的路径
     * <p>返回说明: JSONObject
     * */
    public static JSONObject doGet(String url) throws Exception{
        Request request = Request.Get(url);
        request.setHeader("Content-type", "application/json;charset=UTF8");
        Response response = request.execute();
        String jsonData = response.returnContent().asString();
        JSONObject json = JSONObject.fromObject(jsonData);
        return json;
    }
    
    /**
     * <p>方法说明: HTTP GET 请求
     * <p>编码格式: UTF8 , 微信编码转为UTF-8
     * <p>参数说明: String urL 请求的路径
     * <p>返回说明: JSONObject
     * */
    public static JSONObject doGetUTF8(String url) throws Exception {
        Request request = Request.Get(url);
        request.setHeader("Content-type", "application/json;charset=UTF8");
        Response response = request.execute();
        String jsonData = response.returnContent().asString();
        String string = new String(jsonData.getBytes("ISO-8859-1"),"UTF-8");
        JSONObject json = JSONObject.fromObject(string);
        return json;
    }
    
    
    /**
     * <p>方法说明: HTTP POST 请求
     * <p>编码格式: UTF8
     * <p>参数说明: String urL 请求的路径
     * <p>参数说明: String parAms 请求的参数
     * <p>返回说明: String
     * */
    public static String doPostToStr(String url, String params) throws Exception {
        Request request = Request.Post(url);
        request.bodyByteArray(params.getBytes("UTF8"));
        Response response = request.execute();
        return response.returnContent().asString();
    }
    
    /**
     * <p>方法说明: HTTP GET 请求
     * <p>编码格式: UTF8
     * <p>参数说明: String urL 请求的路径
     * <p>返回说明: String
     * */    
    public static String doGetToStr(String url) throws Exception {
        Request request = Request.Get(url);
        request.setHeader("Content-type", "application/json;charset=UTF8");
        Response response = request.execute();
        return response.returnContent().asString();
    }
    
}

上面是我封装的几个简单方法,这样就可以直接使用了:

package com.wx.service.impl;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.tool.IsNull;
import com.wx.bean.AppPath;
import com.wx.tool.HttpUtil;

import net.sf.json.JSONObject;

/**
 * <p>类说明: 获取token线程
 * <p>创建人: geYang
 * <p>创建时间:2017.08.29
 * */
public class TokenThread implements Runnable {

    private static String access_token;
    
	private boolean close = false;         //线程控制

	/* 外界拿取access_token方法  */
    public static String getToken(){
        return access_token;
    }
	
	public void performClose() {
		this.close = true;
	}
	
    @Override
    public void run() {
	    while (!close){
		    try{
			    if( IsNull.isNull(access_token) ){
				    Thread.sleep(1000*3); 				//获取的access_token为空休眠3秒
			    }else{
				    Thread.sleep(7000*1000); 			//获取到access_token 休眠7000秒
			    }
			    access_token = getAccessToken();		//向服务器发起请求

			    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
			    System.out.println(access_token);
				
		    }catch(Exception e){
				System.out.println("发生异常");
				e.printStackTrace();
                try{
                    Thread.sleep(1000*1); 				//发生异常休眠1秒
                }catch (Exception e1){
                	e.printStackTrace();
                	System.out.println("休眠发生异常");
                }
		    }
			
	    }
    }
	
	/**
	 * <p>方法说明: 获取access_token
	 * */
    private static String getAccessToken(){
	    try {
            /* 进行HTTP GET 请求 */
            JSONObject jsonObj = HttpUtil.doGet(AppPath.getUrl());
            String access_token = jsonObj.getString("access_token");
            
            return access_token;
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("com.wx.tool.TokenThread.getAccessToken请求异常");
        }
        return null;
	}
    
	/**
	 * <p>方法说明:手动获取access_token
	 * */
	public static void main(String[] args) {
	    String access_token = getAccessToken();
	    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
	    System.out.println(access_token);
	}
}

在 fluent-hc 包 中自动为我们处理了HTTP协议等相关高深问题.我们只需要传入路径和参数就可以使用GET和POST等请求,是不是非常简单.....

 

 

© 著作权归作者所有

共有 人打赏支持
ge洋
粉丝 12
博文 54
码字总数 56339
作品 0
成都
程序员
私信 提问
类加载器(ClassLoader)

“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到java虚拟机外部去实现,以便让引用程序自己决定如何去获取所需要的类。实现这个动作的代码模块被称为类加载器。 类加载器...

cookqq
2013/03/19
0
0
从java的类装载器看安全

jave是安全的,这体现在多个方面,其中之一就是java类的加载,而且java类的加载安全机制体现出来的是一种原则,就是保持信息的单向流动而不是 杂糅的双向依赖总是一件好事,因为首先这样做会...

晨曦之光
2012/04/10
99
1
Tomcat的组件及配置文件(一)

tomcat的组件: tomcat运行在JVM中,运行在JVM中之后,它会启动一个JVM实例,这个JVM实例称之为叫做tomcat server; 一个server就是运行在JVM中的一个实例,这个实例内部跑的是tomcat; conn...

长得丑死了
06/21
0
0
Profiler是唯一一款获过奖的Java剖析器

Profiler是唯一一款获过奖的Java剖析器。JProfiler直观的用户界面能够帮助你找到性能瓶颈,并指明你的内存漏洞和解决线程问题。 JProfiler's 特征: 内存剖析 JProfiler的内存视图部分可以提供...

baobiaokongjian
2014/04/24
0
0
关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享

1、原理简介: Fiddler 是目前最强大最好用的 Web 调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置 CGI 请求的断点,甚至修改输入输出数据。同类的工具还有h...

大数据之路
2013/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部