Java 代码中如何调用 第三方Api
在代码中调用第三方API 获取数据
package com.example.demo.utils; import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
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.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; /**
* 提供调用第三方API 的 get与 post 接口
* Created by baizhuang on 2019/9/12 11:37.
*/ @Slf4j
public class HttpClient {
/**
* 表单格式传输
*/
private static final String FORM_CONTEXT_TYPE ="application/x-www-form-urlencoded"; /**
* json 默认的编码类型
*/
private static final String JSON_CONTENT_TYPE = "application/json"; /**
* 默认的编码格式
*/
private static final String DEFAULT_CHARSET = "UTF-8"; /**
* 请求配置对象
*/
private static RequestConfig requestConfig; /**
* get 请求,将参数包含在 url 路径中
* url : 路径
* return: json 对象
*/
public static JSONObject doGet(String url){
JSONObject jsonObject = null;
try(CloseableHttpClient client = HttpClients.createDefault();){
HttpGet request = new HttpGet(url);
request.setConfig(requestConfig);
try(CloseableHttpResponse response = client.execute(request);){
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == HttpStatus.SC_OK){
HttpEntity entity = response.getEntity();
String responseContent = EntityUtils.toString(entity);
jsonObject = JSONObject.parseObject(responseContent);
}else{
log.info("Get请求失败:{},状态码:{}",url,statusCode);
}
}
}catch (IOException e){
log.info("Get 请求异常:{},状态码:{}",url,e.getMessage());
e.printStackTrace();
}
return jsonObject;
} /**
* get 请求,将参数以Map 的形式传入
* path : 包括 协议、主机、端口、资源路径
* param: 请求参数
*
* @param
*/
public static JSONObject doGet(String path,Map<String,String> params){
List<NameValuePair> queryParans = convertParamsMapToList(params);
URI uri = null;
try{
uri = new URIBuilder()
.setPath(path)
.setParameters(queryParans)
.build();
}catch (URISyntaxException e){
e.printStackTrace();
}
return doGet(uri.toString());
} /**
* 将Map<String,String> 类型的请求参数转换为 List<NameValuePair>
* @param
*
*/
private static List<NameValuePair> convertParamsMapToList(Map<String,String> params){
List<NameValuePair> queryParams = new ArrayList<>();
for(String s : params.keySet()){
queryParams.add(new BasicNameValuePair(s,params.get(s)));
}
return queryParams;
} /**
* 将请求拆分开传入
*
* scheme 请求协议
* host 主机地址
* port 端口
* path 路径
* params 请求参数
* @param
*/
public static JSONObject doGet(String scheme,String host,Integer port,String path,Map<String,String> params){
List<NameValuePair> queryParams = convertParamsMapToList(params);
URI uri = null;
try {
uri = new URIBuilder().setScheme(scheme)
.setHost(host)
.setPort(port)
.setPath(path)
.setParameters(queryParams)
.build();
}catch (URISyntaxException e){
e.printStackTrace();
}
return doGet(uri.toString());
} /**
* post 请求,请求参数被封装在 JSONObject
* url : 请求地址
* jsonParam :请求参数
*
*/
public static JSONObject doPost(String url,JSONObject jsonParam){
return doPost(url,jsonParam,null);
} /**
* doPost ,以表单提交
*/
public static JSONObject doPost(String url,String params){
return doPost(url,params,FORM_CONTEXT_TYPE,null);
} /**
* post 请求,请求参数被封装在 JSONObject 中,可以设置字符编码
* url: 请求地址
* jsonParam : 请求参数
* charset 字符编码方法
*/
public static JSONObject doPost(String url,JSONObject jsonParam,String charset){
return doPost(url,jsonParam.toJSONString(),JSON_CONTENT_TYPE,charset);
} public static JSONObject doPost(String url,JSONObject jsonParam,boolean isJsonParam,String charset){
return doPost(url,jsonParam.toJSONString(),JSON_CONTENT_TYPE,charset);
} /**
* post 请求,参数为字符串,可以为 JSON ,可以为普通格式,可以设置字符编码
* 如果为 json 格式, isJsonStringParam = true
* 如果是普通格式: name =Jack&age =10 ,则 isJsonStringParam = false
*
* url : 请求地址
* stringParam 请求参数字符串
* isJsonStringParam : 请求是否为 json 格式
* charset 字符编码格式
*/
public static JSONObject doPost(String url,String stringParam,boolean isJsonStringParam,String charset){
JSONObject jsonResult = null;
if(isJsonStringParam){
jsonResult = doPost(url,stringParam,JSON_CONTENT_TYPE,charset);
}else{
jsonResult = doPost(url,stringParam,FORM_CONTEXT_TYPE,charset);
}
return jsonResult;
} /**
* Post 请求
* url: 请求地址
* requestParam 请求参数,字符串格式
* contentType 内容编码格式
* charset 字符编码格式
*
*/
public static JSONObject doPost(String url,String requestParam,String contentType,String charset){
charset = charset==null?DEFAULT_CHARSET:charset;
JSONObject jsonResult = null;
try(CloseableHttpClient httpClient = HttpClients.createDefault();){
HttpPost httpPost = new HttpPost(url);
//构造实体请求
StringEntity requestEntity = new StringEntity(requestParam,charset);
requestEntity.setContentEncoding(charset);
requestEntity.setContentType(contentType);
httpPost.setEntity(requestEntity);
httpPost.setConfig(requestConfig);
try(CloseableHttpResponse response = httpClient.execute(httpPost);){
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == HttpStatus.SC_OK){
HttpEntity responseEntity = response.getEntity();
String responseContent = EntityUtils.toString(responseEntity,charset);
jsonResult = JSONObject.parseObject(responseContent);
}else{
log.error("post 请求失败:{},状态码:{}",url,statusCode);
}
}
}catch (IOException e){
e.printStackTrace();
}
return jsonResult;
} }
Java 代码中如何调用 第三方Api的更多相关文章
- 如何在java代码中调用一个web项目jsp或者servlet
有时候需要调用一个web项目的jsp或者servlet,但是执行内部的代码,并不是打开jsp,例如需要在一段java代码中清除一个web项目中的缓存,那么可以把清除缓存的代码放在该web项目的一个se ...
- Unity在Android和iOS中如何调用Native API
本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调 ...
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)
转自:http://www.cnblogs.com/Yahong111/archive/2007/08/16/857574.html 续上文[翻译]MSIL 教程(一) ,本文继续讲解数组.分支.循环 ...
- Android如何在java代码中设置margin
习惯了直接在xml里设置margin(距离上下左右都是10dip),如: <ImageView android:layout_margin="10dip" android:s ...
- Spring MVC框架下在java代码中访问applicationContext.xml文件中配置的文件(可以用于读取配置文件内容)
<bean id="propertyConfigurer" class="com.****.framework.core.SpringPropertiesUtil& ...
- 转--Android如何在java代码中设置margin
======== 3 在Java代码里设置button的margin(外边距)? 1.获取按钮的LayoutParams LinearLayout.LayoutParams layoutParams ...
- 在java代码中执行js脚本,实现计算出字符串“(1+2)*(1+3)”的结果
今天在公司项目中,发现一个计算运费的妙招.由于运费规则各种各样,因此写一个公式存到数据库.下次需要计算运费时,直接取出这个公式,把公式的未知变量给替换掉,然后计算出结果就是ok了. 一 ...
- java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法
1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...
- vue 服务代理 调用第三方api
项目中前期需要调用第三方API来获取汇率.因为直接调用会有跨域的问题,所以使用来服务代理. 在config配置代理可以这样写: 而调用接口就可以这样写: 坑:配置完成后一直报500,开始怀疑人生.最后 ...
随机推荐
- 设备驱动基础学习--platform driver简单实现
platform是一条虚拟的总线.设备用platform_device表示,驱动用platform_driver进行注册,Linux platform driver机制和传统的device drive ...
- 最大m段子段和 Day9 - E - Max Sum Plus Plus HDU - 1024
Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we ...
- Python3问题TypeError: object() takes no parameters
1. Python中关键字变量和特殊函数,都是以__xxx__来表示的 初学Python的朋友,需要注意其中变量名中前后是有两个下划线(_)的,如果不注意,调用内部关键字变量和特殊函数时,将会出现错误 ...
- 熟悉这几道 Redis 高频面试题,面试不用愁
1.说说 Redis 都有哪些应用场景? 缓存:这应该是 Redis 最主要的功能了,也是大型网站必备机制,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力. 共享Ses ...
- 改变input[type=range]的样式 动态滑动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- acm数论之旅(转载) -- 逆元
ACM数论之旅6---数论倒数,又称逆元(我整个人都倒了( ̄﹏ ̄)) 数论倒数,又称逆元(因为我说习惯逆元了,下面我都说逆元) 数论中的倒数是有特别的意义滴 你以为a的倒数在数论中还是1/a吗 ( ...
- 关于 appium get_attribute 方法的坑
(得要学着看源码) 问题: self.driver.find_element_by_id("id").get_attribute("content-desc") ...
- android studio中project structure配置
android studio project structure 1.project中填jdk路径 2.module中添androidsdk路径 3.sdks中填jdk路径
- 传奇脚本:#AutoRun NPC SEC 参数说明
传奇脚本:#AutoRun NPC SEC 参数说明 SEC:按秒运行MIN:按分运行HOUR:按小时运行DAY:按天运行RunOnDay:按每天什么时候运行RUNONWEEK:按星期几及时间运行机器 ...
- Tensorflow机器学习入门——读取数据
TensorFlow 中可以通过三种方式读取数据: 一.通过feed_dict传递数据: input1 = tf.placeholder(tf.float32) input2 = tf.placeho ...