文档章节

JAVA HTTP请求工具类

ge洋
 ge洋
发布于 2017/09/12 13:52
字数 842
阅读 148
收藏 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洋
粉丝 10
博文 52
码字总数 55665
作品 0
成都
程序员
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
类加载器(ClassLoader)

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

cookqq
2013/03/19
0
0
关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享

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

大数据之路
2013/08/08
0
0
win7中java编程工具安装 java环境变量设置

win7中java编程工具安装 java环境变量设置 Question:编译是显示'javac'不是内部或外部命令,也不是可运行的程序或批处理文件 解决: 在【系统变量】里编辑javahome、classpath、path环境变量...

澜fish
2014/03/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

帧动画(wifi信号动态动画)

准备六张wifi不同信号强度的素材图片,复制到drawable目录中 在drawable目录中新建frame文件,并编写代码 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"> ...

lanyu96
24分钟前
1
0
快速get到学习Linux操作系统的点

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能够运行主要的UNIX工具软件、网络协议和应用程序。它支持32位...

问题终结者
32分钟前
1
0
Django2 model操作数据库

1.将应用(如learn)添加到安装应用配置中 将我们新建的应用(learn)添加到 settings.py 中的 INSTALLED_APPS中,告诉Django有这么一个应用。 INSTALLED_APPS = [ 'django.contrib.ad...

MichaelShu
35分钟前
1
0
SpringBoot基础篇Bean之条件注入之注解使用

更多Spring文章,欢迎点击 一灰灰Blog-Spring专题 bean的条件注入,除了前面一篇博文中介绍的通过@Conditional注解配合Condition接口的实现之外,还提供了更多简化的注解使用方式,省略了自己...

小灰灰Blog
45分钟前
1
0
git clone 报错 Clone failed: Authentication failed for

新装了系统,git和phpstorm的配置全都没有了,重新安装了git和phpstorm 系统:windows10 代码托管平台:阿里云code 软件的安装不作赘述。 报错1 Could not read from remote repository 解决...

Marhal
47分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部