java使用httpclient封装post请求和get的请求

2023-10-26

 

在我们程序员生涯中,经常要复用代码,所以我们应该养成时常整理代码的好习惯,以下是我之前封装的httpclient的post和get请求所用的代码:

package com.marco.common;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;

/**
 * @author 马弦
 * @date 2017年10月23日 下午2:49
 * HttpClient工具类
 */
public class HttpUtil {
	
	private static Logger logger = Logger.getLogger(HttpUtil.class);

	/**
	 * get请求
	 * @return
	 */
	public static String doGet(String url) {
        try {
        	HttpClient client = new DefaultHttpClient();
            //发送get请求
            HttpGet request = new HttpGet(url);
            HttpResponse response = client.execute(request);
 
            /**请求发送成功,并得到响应**/
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                /**读取服务器返回过来的json字符串数据**/
                String strResult = EntityUtils.toString(response.getEntity());
                
                return strResult;
            }
        } 
        catch (IOException e) {
        	e.printStackTrace();
        }
        
        return null;
	}
	
	/**
	 * post请求(用于key-value格式的参数)
	 * @param url
	 * @param params
	 * @return
	 */
	public static String doPost(String url, Map params){
		
		BufferedReader in = null;  
        try {  
            // 定义HttpClient  
            HttpClient client = new DefaultHttpClient();  
            // 实例化HTTP方法  
            HttpPost request = new HttpPost();  
            request.setURI(new URI(url));
            
            //设置参数
            List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
            for (Iterator iter = params.keySet().iterator(); iter.hasNext();) {
    			String name = (String) iter.next();
    			String value = String.valueOf(params.get(name));
    			nvps.add(new BasicNameValuePair(name, value));
    			
    			//System.out.println(name +"-"+value);
    		}
            request.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));
            
            HttpResponse response = client.execute(request);  
            int code = response.getStatusLine().getStatusCode();
            if(code == 200){	//请求成功
            	in = new BufferedReader(new InputStreamReader(response.getEntity()  
                        .getContent(),"utf-8"));
                StringBuffer sb = new StringBuffer("");  
                String line = "";  
                String NL = System.getProperty("line.separator");  
                while ((line = in.readLine()) != null) {  
                    sb.append(line + NL);  
                }
                
                in.close();  
                
                return sb.toString();
            }
            else{	//
            	System.out.println("状态码:" + code);
            	return null;
            }
        }
        catch(Exception e){
        	e.printStackTrace();
        	
        	return null;
        }
	}
	
	/**
	 * post请求(用于请求json格式的参数)
	 * @param url
	 * @param params
	 * @return
	 */
	public static String doPost(String url, String params) throws Exception {
		
		CloseableHttpClient httpclient = HttpClients.createDefault();
		HttpPost httpPost = new HttpPost(url);// 创建httpPost   
    	httpPost.setHeader("Accept", "application/json"); 
    	httpPost.setHeader("Content-Type", "application/json");
    	String charSet = "UTF-8";
    	StringEntity entity = new StringEntity(params, charSet);
    	httpPost.setEntity(entity);        
        CloseableHttpResponse response = null;
        
        try {
        	
        	response = httpclient.execute(httpPost);
            StatusLine status = response.getStatusLine();
            int state = status.getStatusCode();
            if (state == HttpStatus.SC_OK) {
            	HttpEntity responseEntity = response.getEntity();
            	String jsonString = EntityUtils.toString(responseEntity);
            	return jsonString;
            }
            else{
				 logger.error("请求返回:"+state+"("+url+")");
			}
        }
        finally {
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
				httpclient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
        }
        return null;
	}
	
}


httpclient是一个非常常用的工具,在项目开发的时候,经常需要请求第三方的接口,我整理好了这段代码,以后回头找的时候就方便啦!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java使用httpclient封装post请求和get的请求 的相关文章

随机推荐

  • C# 五步完成Bmp文件流到AVI的转换

    近日因项目需要 从Android客户端发送过来的图像流既要能实时显示在picturebox中 还要求能够转自动录制成AVI文件 网上查了不少关于C 屏幕录制的文章 什么directshow之类的 用C 倒是很方便 C 还是过于麻烦了点 对于
  • msconfig蓝屏_在msconfig里修改了处理器数和最大内存后电脑无法启动一直蓝屏

    楼主你 很有才 没事改那玩样 你以为4核心就 是4个处理器了 也 从没听说过 天冷了 启动会很慢www mh456 com防采集 win10 上面那个老兄2113 我代码没成功 5261情况基本符合就是没成 懵 然后我开4102机按esc选
  • 后端实战教程:如何使用 Node.js 开发 RESTful API 接口(Node.js + Express + Sequelize + MySQL)

    使用 Node js 开发 RESTful API 接口 后端部分 node js Express Sequelize MySQL 后端部分 node js Express MySQL 后端部分 后端 node js 项目结构 安装 nod
  • 60道逻辑推理题及答案

    作者 billy 版权声明 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 前言 程序员面试题中经常会出现一些烧脑的逻辑题 博主觉得这种题目非常有趣 于是收集了一些分享给大家 1 假设有一个池塘 里面有无穷多的水 现有2
  • 学完python基础知识之后可以做些什么-学完python后再学什么

    本文收集整理关于学完python后再学什么的相关议题 使用内容导航快速到达 内容导航 Q1 Python学完还需要学什么才可以开发真正的应用软件 你说的c c mfc的关系 并不完全需要向你所说的先后顺序去学 只是说c语言属于面向过程的语言
  • F1.52 视频编码简介

    视频编解码的应用技术很复杂 涉及到的技术主要包括I P B帧技术 运动估计和运动补偿等 视频压缩编码过程一般分3个步骤 包括时间维 空间维及熵编码 视频解码是编码的逆过程 首先是时间维压缩 主要以参考帧的数据预测当前帧的数据 输出预测向量和
  • QFontMetrics、QLabe::paintEvent() 实现label自适应 text宽度, 并添加下划线,Qlabel中 字符串宽度获取

    参考 实用QFontMetrics QLabe 中字符串宽度获取 每个字符的宽度 QFontMetrics fontMetrics this gt font 字符串总宽度 int textWidth fontMetrics width m
  • 结巴分词中TFIDF的原理

    之前了解TFIDF只是基于公式 今天被阿里面试官问住了 所以深入讨论下TFIDF在结巴分词中原理 概念 TF IDF term frequency inverse document frequency 是一种用于资讯检索与资讯探勘的常用加权
  • MFC-核心类库-CWnd的成员函数介绍(二)

    1 CWnd FromHandle CWnd在给定窗口句柄时 返回指向对象的指针 如果CWnd对象未附加到句柄 CWnd则会创建并附加临时对象 static CWnd PASCAL FromHandle HWND hWnd 2 CWnd A
  • 工程代码模板注释及C规范

    工程代码模板注释规范 效果 使用方法以IAR为例 C代码规范 工程注释模板 C文件模板 h文件模板 函数注释 函数或变量命名方式 文件编码 对齐方式 优化 防御性编程 完成 Doxygen全套工具下载 效果 chm文件 网页效果 使用方法以
  • linux修改主机名的方法

    linux修改主机名的方法 用hostname命令可以临时修改机器名 但机器重新启动之后就会恢复原来的值 hostname 查看机器名 hostname i 查看本机器名对应的ip地址 另外一种方法就是之久修改配置文件 修改 etc sys
  • 网络与信息安全基础知识--网络的协议与标准

    说在前面 本系列文章专注于软考备考复习内容梳理 文章内容是对教材中知识点和考点的提炼 备考过程中可以有针对的进行复习 减少阅读量 有的放矢 导航目录 一 网络的标准 1 电信标准 2 相关国际标准的制定机构 二 局域网协议 1 LAN模型
  • 使用boost::gregorian模块计算自出生以来的天数的测试程序(C/C++)

    使用boost gregorian模块计算自出生以来的天数的测试程序 C C 在本文中 我们将介绍如何使用C 中的boost gregorian模块来计算自出生以来的天数 boost gregorian是一个日期和时间处理库 提供了处理日期
  • 华为数字化转型之道 平台篇 第十二章 云华数字平台

    第十二章 云华数字平台 企业开展数字化转型 将面临复杂的业务形态 丰富多样的场景以及分步于全球的业务和资源 这就需要有不同类型的数字技术 不同类型的IT平台和基础设施服务提供支撑 数字平台以自助 按需 在线的方式为业务以及IT产品团队提供上
  • FISCO BCOS Python SDK环境配置(Ubuntu)

    环境要求 依赖软件 CentOS sudo yum install y zlib devel libffi devel wget git MacOs brew install wget git Ubuntu sudo apt install
  • OpenCore介绍

    一 OpenCore简介 OpenCore是Android的多媒体核心 采用C 实现 定义了全功能的操作系统移植层 OSCL 各种基本的功能均被封装成类的形式 各层次之间的接口多使用继承等方式 从宏观上来看 它主要包含了两大方面的内容 PV
  • Win10安装Nginx

    一 下载安装包 链接 https pan baidu com s 1TAzO7uyNLtGxejdeyh1UQQ 提取码 pdkv 二 安装 1 解压缩 运行cmd 使用命令进行操作 不要直接双击nginx exe 使用命令到达nginx的
  • 企业如何进行“对标”管理?

    对标 管理起源于上世纪70年代的美国 最初是人们利用 对标 寻找与别的公司的差距 把它作为一种调查比较的基准方法 对标 管理是寻找和学习最佳管理案例和运行方式的一种方法 现已成为最受企业欢迎的第三大战略管理方法 对标 就是对比标杆找差距 推
  • SpringMVC ViewResolver查找序列

    原文地址 http xiaoyaocao iteye com blog 1839125 虽然我们在之前的示例中一直都是使用一个InternalResourceViewResolver进行视图查找 但这并不意味着每个基于 Spring MVC
  • java使用httpclient封装post请求和get的请求

    在我们程序员生涯中 经常要复用代码 所以我们应该养成时常整理代码的好习惯 以下是我之前封装的httpclient的post和get请求所用的代码 package com marco common import java io Buffere