Utils--前台调用后台接口工具类

package com.taotao.manage.httpclient;

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.config.RequestConfig;
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.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class ApiHttpClientService implements BeanFactoryAware { private BeanFactory beanFactory; @Autowired(required=false)
private RequestConfig config; /**
* GET请求,成功返回String;失败返回null
*
* @param url
* @return
* @throws ParseException
* @throws IOException
*/
public String doGet(String url) throws ParseException, IOException {
// 2、创建http GET请求
HttpGet httpGet = new HttpGet(url);
httpGet.setConfig(config);
CloseableHttpResponse response = null;
try {
// 3、执行请求
response = getttpClient().execute(httpGet);
// 4、判断返回状态是否为200
if (response.getStatusLine().getStatusCode() == 200) {
return EntityUtils.toString(response.getEntity(), "UTF-8");
}
} finally {
if (response != null) {
response.close();
}
}
return null;
} /**
* 带有参数的GET请求 ,返回:null,请求失败,String数据,请求成功
*
* @param url
* @param params
* @return
* @throws URISyntaxException
* @throws IOException
* @throws ParseException
*/
public String doGet(String url, Map<String, String> params) throws URISyntaxException, ParseException, IOException {
URIBuilder uriBuilder = new URIBuilder(url);
for (Map.Entry<String, String> map : params.entrySet()) {
uriBuilder.setParameter(map.getKey(), map.getValue());
}
return this.doGet(uriBuilder.build().toURL().toString());
} /**
* 创建http POST请求
*
* @param url
* @param params
* @return
* @throws IOException
* @throws ParseException
*/
public HttpResult doPost(String url, Map<String, String> params) throws ParseException, IOException {
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(config);
// 伪装成浏览器访问
// 设置2个post参数,一个是scope、一个是q
if (params != null) {
List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);
for (Map.Entry<String, String> map : params.entrySet()) {
parameters.add(new BasicNameValuePair(map.getKey(), map.getValue()));
}
// 构造一个form表单式的实体
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
// 将请求实体设置到httpPost对象中
httpPost.setEntity(formEntity);
}
CloseableHttpResponse response = null;
try {
// 执行请求
response = getttpClient().execute(httpPost);
// 判断返回状态是否为200
return new HttpResult(response.getStatusLine().getStatusCode(),
EntityUtils.toString(response.getEntity(), "UTF-8"));
} finally {
if (response != null) {
response.close();
}
}
} /**
* POST无餐请求
*
* @param url
* @return
* @throws ParseException
* @throws IOException
*/
public HttpResult doPost(String url) throws ParseException, IOException {
return this.doPost(url, null);
} /**
* 拿到最新的,是多例的
*
* @return
*/
public CloseableHttpClient getttpClient() {
return this.beanFactory.getBean(CloseableHttpClient.class);
} /**
* spring/applicationContext-HttpClient为多例 创建多例 ,可以放对象
*
* @param bean
* @throws BeansException
*/
@Override
public void setBeanFactory(BeanFactory bean) throws BeansException {
this.beanFactory = bean;
} /**
* 创建http POST请求json
*
* @param url
* @param params
* @return
* @throws IOException
* @throws ParseException
*/
public HttpResult doPostJSON(String url, String params) throws ParseException, IOException {
HttpPost httpPost = new HttpPost(url);
httpPost.setConfig(config);
// 伪装成浏览器访问
// 设置2个post参数,一个是scope、一个是q
if (params != null) {
StringEntity entity=new StringEntity(params, ContentType.APPLICATION_JSON);
// 将请求实体设置到httpPost对象中
httpPost.setEntity(entity);
}
CloseableHttpResponse response = null;
try {
// 执行请求
response = getttpClient().execute(httpPost);
// 判断返回状态是否为200
return new HttpResult(response.getStatusLine().getStatusCode(),
EntityUtils.toString(response.getEntity(), "UTF-8"));
} finally {
if (response != null) {
response.close();
}
}
}
}

   好久之前写的,今天忽然有个想法,把这些工具类总计下。以便以后的使用

Utils--前台调用后台接口工具类的更多相关文章

  1. Java调用第三方接口工具类(json、form)

    1.JSON值访问 /** * 调用对方接口方法 * @param path 对方或第三方提供的路径 * @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析 ...

  2. Java模拟http请求调用远程接口工具类

    package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  3. 带SSL证书的httpclient 远程接口工具类

    package com.iups.wx.util; import java.io.IOException; import java.io.UnsupportedEncodingException; i ...

  4. thinkjs学习-this.assign传递数据和ajax调用后台接口

    在页面加载时,就需要显示在页面上的数据,可以在后台使用this.assign赋值,在前台通过ejs等模板获取:用户点击按钮,或者触发某些事件和后台进行交互时,就需要用到ajax调用后台接口.本文通过一 ...

  5. Asp.Net前台调用后台变量

    1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %&g ...

  6. 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP——实践篇(二)

    在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——理论篇中描述了一下ASP.NET新手的三个问题及相关的HTTP协议内容,在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP—— ...

  7. 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP——理论篇

    工作两年多了,我会经常尝试给公司小伙伴儿们解决一些问题,几个月下来我发现初入公司的小朋友最爱问的问题就三个 1. 我想前台调用后台的XXX方法怎么弄啊? 2. 我想后台调用前台的XXX JavaScr ...

  8. 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP

    由ASP.NET所谓前台调用后台.后台调用前台想到HTTP 在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——理论篇中描述了一下ASP.NET新手的三个问题及相关的HTTP协议内容,在由 ...

  9. ASP.NET所谓前台调用后台、后台调用前台想到HTTP——实践篇

    由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——实践篇 在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——理论篇中描述了一下ASP.NET新手的三个问题及相关的HTTP协议 ...

随机推荐

  1. 【译】第4节---简单的Code First示例

    原文地址:http://www.entityframeworktutorial.net/code-first/simple-code-first-example.aspx 假设我们要为XYZ学校创建一 ...

  2. OpenLayers中的球面墨卡托投影

    最近看OpenLayers,研究到地图投影时找到官方的文档,就翻译了一下,由于英文能力差,翻译不好的地方,请看原文 原文地址:http://docs.openlayers.org/library/sp ...

  3. c#四舍五入取整

    Math.Round(3.45, 0, MidpointRounding.AwayFromZero) 上取整或下取整 Math.Ceiling(3.1)=4; Math.Floor(3.9)=3;

  4. python requests post和get

    import requests import time import hashlib import os import json from contextlib import closing impo ...

  5. win10,python3.6,django2.0.3,项目基本命令

    1.django-admin startproject project_name(创建项目) 2.python manage.py startapp appname(创建应用) 3.python ma ...

  6. wxss与rpx

    WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式. WXSS 用来决定 WXML 的组件应该怎么显示. 为了适应广大的前端开发者,WXSS 具有 CSS ...

  7. R 的内部机制

    在前面的章节中,我们已经学习了 R 语言的基础功能,并且了解了如何运用向量.矩阵.列表和数据框表示不同形式的数据,以及用内置函数解决简单的问题.但是仅仅了解这些功能并不能解决所有问题.现实中的数据分析 ...

  8. Django框架中,使用celery实现异步

    作用:在使用框架时,在视图函数中实现异步构成: 任务task:一段耗时并与响应结果无关的代码,如发短信 工人worker:新进程,用于执行任务代码 代理人broker:调用任务时,将任务添加到队列中, ...

  9. jGrid + echart 后台管理

    用来初始化表的大小: $(select_dom).jqGrid( 'setGridWidth', parent_column.width() ); 表的大小随着页面的宽度变化: $(window).o ...

  10. 第 8 章 容器网络 - 053 - overlay 是如何隔离的?

    overlay 是如何隔离的? 不同的 overlay 网络是相互隔离的. 创建第二个 overlay 网络 ov_net2 并运行容器 bbox3. docker network create -d ...