java实现https,https接口请求
/**********************https 接口'*******************/
/**
* 安全证书管理器
*/
public class MyX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(final X509Certificate[] chain,
final String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(final X509Certificate[] chain,
final String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
/**
* 主要说明了如何访问带有未经验证证书的HTTPS站点
*
* @param requestUrl 例如:获取微信用户信息接口 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
* 请求地址
* @param requestMethod
* 请求方式(GET、POST)
* @param outputStr
* 提交的数据
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
*/
public static JSONObject httpsRequest(final String requestUrl,
final String requestMethod, final String outputStr) {
JSONObject jsonObject = null;
BufferedReader bufferedReader = null;
InputStream inputStream = null;
HttpsURLConnection httpUrlConn = null;
InputStreamReader inputStreamReader = null;
final StringBuffer buffer = new StringBuffer();
try {
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
final TrustManager[] tm = { new MyX509TrustManager() };
final SSLContext sslContext = SSLContext.getInstance("SSL",
"SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
final SSLSocketFactory ssf = sslContext.getSocketFactory();
final URL url = new URL(requestUrl);
httpUrlConn = (HttpsURLConnection) url.openConnection();
httpUrlConn.setSSLSocketFactory(ssf);
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
// 设置请求方式(GET/POST)
httpUrlConn.setRequestMethod(requestMethod);
if ("GET".equalsIgnoreCase(requestMethod)) {
httpUrlConn.connect();
}
// 当有数据需要提交时
if (null != outputStr) {
final OutputStream outputStream = httpUrlConn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 将返回的输入流转换成字符串
inputStream = httpUrlConn.getInputStream();
inputStreamReader = new InputStreamReader(inputStream, "utf-8");
bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
jsonObject = JSONObject.fromObject(buffer.toString());
}catch (final Exception e) {
log.error("https request error:", e);
} finally {
// 释放资源
.......
}
return jsonObject;
}
/**********************http 接口'*******************/
@Slf4j
public class HttpSendUtil {
private static final String APPLICATION_JSON = "application/json";
private static final String CONTENT_TYPE_TEXT_JSON = "text/json";
private static RequestConfig requestConfig = null;
final static ObjectMapper objectMapper = new ObjectMapper();
static {
requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(50000).setConnectTimeout(50000)
.setSocketTimeout(50000).build();
}
/**
* 默认编码utf -8
* 解决返回数据中文乱码问题
* @param entity
* must not be null
*/
public static String getContentCharSet(final HttpEntity entity)
throws ParseException {
if (entity == null) {
throw new IllegalArgumentException("HTTP entity may not be null");
}
String charset = null;
if (entity.getContentType() != null) {
final HeaderElement values[] = entity.getContentType()
.getElements();
if (values.length > 0) {
final NameValuePair param = values[0]
.getParameterByName("charset");
if (param != null) {
charset = param.getValue();
}
}
}
if (StringUtils.isEmpty(charset)) {
charset = "UTF-8";
}
return charset;
}
/**
* Get 请求
*
* @param url
* @return
*/
public static String httpGet(final String url) {
final CloseableHttpClient httpClient = getCloseableHttpClient();
final HttpGet httpGet = new HttpGet(url);
httpGet.addHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON);
CloseableHttpResponse response = null;
String result = null;
String charset = HTTP.UTF_8;
try {
response = httpClient.execute(httpGet);
final HttpEntity entity = response.getEntity();
if (null != entity) {
System.out.println("响应状态码:" + response.getStatusLine());
System.out
.println("-------------------------------------------------");
// System.out.println("响应内容:" + EntityUtils.toString(entity));
System.out
.println("-------------------------------------------------");
charset = getContentCharSet(entity);
result = EntityUtils.toString(entity, charset);
EntityUtils.consume(entity);
}
} catch (final Exception e) {
e.printStackTrace();
} finally {
closeHttpResponseAndHttpClient(response, httpClient);
}
return result;
}
/**
* Post 请求
*
* @param url
* @param json
* @return
*/
public static String httpPostWithJSON(final String url, final String json) {
final CloseableHttpClient httpClient = getCloseableHttpClient();
final HttpPost httpPost = new HttpPost(url);
httpPost.addHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON);
CloseableHttpResponse response = null;
String result = null;
String charset = HTTP.UTF_8;
try {
// 将JSON进行UTF-8编码,以便传输中文
final String encoderJson = URLEncoder.encode(json, charset);
final StringEntity se = new StringEntity(encoderJson);
se.setContentType(CONTENT_TYPE_TEXT_JSON);
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
APPLICATION_JSON));
httpPost.setEntity(se);
response = httpClient.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
final HttpEntity entity = response.getEntity();
charset = getContentCharSet(entity);
result = EntityUtils.toString(entity);
EntityUtils.consume(entity);
} else {
log.warn("请求失败!");
}
} catch (final IOException e) {
e.printStackTrace();
} finally {
closeHttpResponseAndHttpClient(response, httpClient);
}
return result;
}
private static void closeHttpResponseAndHttpClient(
final CloseableHttpResponse httpResponse,
final CloseableHttpClient client) {
try {
if (null != httpResponse) {
httpResponse.close();
}
if (null != client) {
client.close();
}
} catch (final IOException e) {
e.printStackTrace();
}
}
private static CloseableHttpClient getCloseableHttpClient() {
return HttpClients.custom().setDefaultRequestConfig(requestConfig)
.build();
}
}
java实现https,https接口请求的更多相关文章
- Java 调用Restful API接口的几种方式--HTTPS
摘要:最近有一个需求,为客户提供一些Restful API 接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful ...
- java实现 HTTP/HTTPS请求绕过证书检测代码实现
java实现 HTTP/HTTPS请求绕过证书检测代码实现 1.开发需求 需要实现在服务端发起HTTP/HTTPS请求,访问其他程序资源. 2.URLConnection和HTTPClient的比较 ...
- Java调用Http/Https接口(6)--RestTemplate调用Http/Https接口
RestTemplate是Spring提供的用于访问Http接口的客户端,提供同步的API:在将来的Spring版本中可能会过时,将逐渐被WebClient替代.文中所使用到的软件版本:Java 1. ...
- Java调用Http/Https接口(5)--HttpAsyncClient调用Http/Https接口
HttpAsyncClient是HttpClient的异步版本,提供异步调用的api.文中所使用到的软件版本:Java 1.8.0_191.HttpClient 4.1.4. 1.服务端 参见Java ...
- Java调用Http/Https接口(4)--HttpClient调用Http/Https接口
HttpClient是Apache HttpComponents项目下的一个组件,是Commons-HttpClient的升级版,两者api调用写法也很类似.文中所使用到的软件版本:Java 1.8. ...
- Java调用Http/Https接口(3)--Commons-HttpClient调用Http/Https接口
Commons-HttpClient原来是Apache Commons项目下的一个组件,现已被HttpComponents项目下的HttpClient组件所取代:作为调用Http接口的一种选择,本文介 ...
- Java实现 HTTP/HTTPS请求绕过证书检测
java实现 HTTP/HTTPS请求绕过证书检测 一.Java实现免证书访问Https请求 创建证书管理器类 import java.security.cert.CertificateExcepti ...
- PHP:CURL分别以GET、POST方式请求HTTPS协议接口api
1.curl以GET方式请求https协议接口 //注意:这里的$url已经包含参数了,不带参数你自己处理哦GET很简单 function curl_get_https($url){ $curl = ...
- PHP函数CURL分别以GET、POST方式请求HTTPS协议接口api
1.curl以GET方式请求https协议接口 function curl_get_https($url){ $curl = curl_init(); // 启动一个CURL会话 curl_setop ...
- PHP:CURL分别以GET、POST方式请求HTTPS协议接口api【转】
1.curl以GET方式请求https协议接口 //注意:这里的$url已经包含参数了,不带参数你自己处理哦GET很简单 function curl_get_https($url){ $curl = ...
随机推荐
- C#: 方法的默认参数
大家都知道在C++中,我们可以为方法的参数指定一个默认值,像这样: void foo(int i = 100); 当我们以这种形式调用方法的时候: foo(); 实际上参数i被赋于了默认值,所以相当于 ...
- 对Spring.Net的AOP一些思考及应用
前言 这几天在配置Spring.NET,配到AOP的时候发现自己现在还是没有理解到Spring AOP的实现,只是认识到了一个思想,以前配的时候,看的是给好的例子用,真正用的时候还是要想一下 ...
- Objective-C 学习记录--toches、Motion/Size/Rect/Point/CGFloat/protocol
- (void)touchesBegan touchesEnd touchesCancelled touchesMoved //代表的是手指在屏幕上的动作,开始 结束 取消 移动 //还有就是代表摇动 ...
- Oracle的体系结构
前言 这个章节主要想说的是Oracle的体系结构,这个也是理论强些.还有一些比较理论的知识点(比如表空间啊),就暂时先不写了,下一章节开始进入Oracle的操作阶段,比如表的查询啊.插入以及重点是和S ...
- Form实现主从块金额汇总
1.FORM使用app_calculate.running_total汇总行金额,行上有编码重复验证. 情况一:当录入多个编码重复的行并保存时,报错,清除一个重复行再保存(头行金额一致),报错&quo ...
- 关于Collection'
---恢复内容开始--- 众所周知在我们使用Java中的类的存储的时候经常会使用一些容器,链表的概念,本文将彻底帮您弄清链表的各种概念和模型!!!!注 意理解哦~~~ 大致框架如下: ----> ...
- C# 二进制字节流查找函数IndexOf
C# 二进制字节流查找函数IndexOf /// <summary> /// 报告指定的 System.Byte[] 在此实例中的第一个匹配项的索引. /// </summary&g ...
- Swift学习笔记十
枚举 一个枚举为一组相关联的值定义一个通用类型,并且让你可以在代码中类型安全地操作这些值. C中的枚举将关联的名字指派给一系列整型值.Swift中的枚举类型更为活泼,并不需要为每个成员指定值,如果指定 ...
- stm32 IAP + APP ==>双剑合一
(扩展-IAP主要用于产品出厂后应用程序的更新作用,上一篇博文详细的对IAP 升级程序做了详细的分析http://blog.csdn.net/yx_l128125/article/details/12 ...
- iOS 原生地图(MapKit、MKMapView)轨迹渐变
WechatIMG2.png 项目已接入高德地图,并且大部分功能已经实现好,但BOSS觉得iOS自带的地图效果更好...本着面向老板编程的思想,换之.还好,高德地图是在MapKit上封装的,大部分ap ...