当前位置: 首页 > news >正文

手机网站设计公司哪家专业/优化网站技术

手机网站设计公司哪家专业,优化网站技术,营销型网站建设价值,膜结构网站推广怎么做问题 用OkHttp3做https请求时候报了个java.io.IOException: Hostname was not verified的错误。 问题分析 通常是因为SSL协议握手的过程中,这个服务度地址的证书没有被证实,被信任。 报错消息如下。 Hostname a.com not verified:certificate: sha256/sZ…

问题

用OkHttp3做https请求时候报了个java.io.IOException: Hostname was not verified的错误。

 

问题分析

通常是因为SSL协议握手的过程中,这个服务度地址的证书没有被证实,被信任。

报错消息如下。

  Hostname a.com not verified:certificate: sha256/s+ZoW0wxlNvmDUguAjYVvc6xxnIetO4XUMissqHkBPg=DN: CN=*.b.com, OU=Domain Control ValidatedsubjectAltNames: [*.b.com, b.com]

可以看到请求的证书的域名为b.com,而我们要请求的是a.com,因此错误原因是在验证证书时发现真正请求的域名和服务器的证书域名不一致。

解决方案

如果你认为运行的证书没有任何意义,并且想要绕过它们,那么就需要添加一个空主机名验证程序以使后面的请求正常工作。具体代码如下

   public static OkHttpClient.Builder ignoreSSL (OkHttpClient.Builder builder) {builder.sslSocketFactory(createSSLSocketFactory()).hostnameVerifier((s, sslSession) -> true);return builder;}private static SSLSocketFactory createSSLSocketFactory () {SSLSocketFactory sSLSocketFactory = null;try {SSLContext sc = SSLContext.getInstance("TLS");sc.init(null, new TrustManager[]{new TrustAllManager()}, new SecureRandom());sSLSocketFactory = sc.getSocketFactory();} catch (Exception e) {LOGGER.info(e.getMessage(), e);}return sSLSocketFactory;}private static class TrustAllManager implements X509TrustManager {@Overridepublic void checkClientTrusted (java.security.cert.X509Certificate[] x509Certificates,String s) throws java.security.cert.CertificateException {}@Overridepublic void checkServerTrusted (java.security.cert.X509Certificate[] x509Certificates,String s) throws java.security.cert.CertificateException {}@Overridepublic java.security.cert.X509Certificate[] getAcceptedIssuers () {return new X509Certificate[0];}}

自己封装的http工具类

我自己封装的完整的OkHttp3Util工具类代码如下。

import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.collections.MapUtils;
import org.apache.http.util.TextUtils;import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;/*** @author magotzis on 2018/7/31 下午5:06*/
@Slf4j
public class HttpsUtil {private static final OkHttpClient client = new OkHttpClient.Builder().readTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS).connectTimeout(10, TimeUnit.SECONDS).sslSocketFactory(createSSLSocketFactory()).hostnameVerifier((s, sslSession) -> true).build();private static final Joiner AMPERSAND_JOINER = Joiner.on("&");// 工具类不需要实例化private HttpsUtil() {}private static SSLSocketFactory createSSLSocketFactory () {SSLSocketFactory sSLSocketFactory = null;try {SSLContext sc = SSLContext.getInstance("TLS");sc.init(null, new TrustManager[]{new TrustAllManager()}, new SecureRandom());sSLSocketFactory = sc.getSocketFactory();} catch (Exception e) {log.info(e.getMessage(), e);}return sSLSocketFactory;}private static class TrustAllManager implements X509TrustManager {@Overridepublic void checkClientTrusted (java.security.cert.X509Certificate[] x509Certificates,String s) throws java.security.cert.CertificateException {}@Overridepublic void checkServerTrusted (java.security.cert.X509Certificate[] x509Certificates,String s) throws java.security.cert.CertificateException {}@Overridepublic java.security.cert.X509Certificate[] getAcceptedIssuers () {return new X509Certificate[0];}}/*** 异步调用get请求** @param url      请求的url* @param callback 回调处理*/public static void getByAsyn(String url, Callback callback) {Request request = new Request.Builder().get().url(url).build();client.newCall(request).enqueue(callback);}/*** 同步调用get请求** @param url 请求的url* @return response信息* @throws IOException IO异常*/public static Response getBySync(String url) throws IOException {Request request = new Request.Builder().get().url(url).build();return client.newCall(request).execute();}/*** post请求** @param url         请求的url* @param requestBody requestBody信息* @param headers     请求头部* @return response信息* @throws IOException IO异常*/public static Response post(String url, RequestBody requestBody, Headers headers) throws IOException {Request.Builder build = new Request.Builder();if (headers != null) {build.headers(headers);}Request request = build.post(requestBody).url(url).build();return client.newCall(request).execute();}/*** 拼接url和param** @param url    请求的url* @param params 需要带的参数* @return 拼接好的url*/public static String buildUrl(String url, Map<String, String> params) {if (MapUtils.isEmpty(params)) {return url;}List<String> nameValueList = Lists.newArrayListWithExpectedSize(params.size());for (Map.Entry<String, String> entry : params.entrySet()) {nameValueList.add(entry.getKey() + "=" + entry.getValue());}return url + "?" + AMPERSAND_JOINER.join(nameValueList);}/*** @param url 下载链接* @return 文件路径*/public static File download(String url) {Request request = new Request.Builder().url(url).build();String fileName;File file = null;try {Response response = client.newCall(request).execute();// 解析文件名,如果不存在则随机生成一个uuid作为文件名fileName = getHeaderFileName(response);if (TextUtils.isEmpty(fileName)) {fileName = UidUtil.getUid();}file = new File(fileName);// 输出保存文件byte[] buf = new byte[2048];int len;try (InputStream is = Objects.requireNonNull(response.body()).byteStream();FileOutputStream fos = new FileOutputStream(file)) {while ((len = is.read(buf)) != -1) {fos.write(buf, 0, len);}fos.flush();}} catch (IOException e) {log.error("下载文件失败", e);}return file;}/*** 解析文件头* Content-Disposition: inline; filename="test.pdf";* filename*=UTF-8''test.pdf*/private static String getHeaderFileName(Response response) {String header = response.header("Content-Disposition");if (!TextUtils.isEmpty(header)) {header = header.replace("inline;filename=", "");header = header.replace("filename*=utf-8", "");String[] strings = header.split("; ");if (strings.length > 1) {header = strings[1].replace("filename=", "");header = header.replace("\"", "");return header;}return "";}return "";}}

 

转载于:https://www.cnblogs.com/magotzis/p/9488157.html

http://www.lbrq.cn/news/1480159.html

相关文章:

  • 黄石网站建设公司/域名大全
  • 什么是做自己的网站/百家联盟推广部电话多少
  • 网站开发日志文档/黑帽seo技术论坛
  • html5培训网站模板/百度网盘搜索引擎
  • 做这种灰色的网站犯法/如何做网页
  • 类似源码之家的网站/百度做推广一般要多少钱
  • 如何做英文网站外链/深圳网络营销怎么推广
  • 广州一建筑外墙脚手架坍塌/网站排名怎么优化
  • b2b网站有哪些模块/宁波建站模板系统
  • 做图素材网站/网站运营方案
  • 磁力天堂/天津百度搜索排名优化
  • 网站大数据怎么做/群站优化之链轮模式
  • 免费博客网站/开发网站需要多少钱
  • 网站建设行业研究/百度关键词规划师
  • 做网站的技术支持/百度导航下载安装手机导航
  • 宁波网站建设公司地址/视频号视频怎么看下载链接
  • 上海做网站的哪家好/搭建网站平台
  • 建站一条龙/互联网营销师是干什么
  • 绵阳手机网站制作/网站内部seo
  • 杭州网站建设宣盟网络/职业教育培训机构排名前十
  • 事业单位网站建设计划/电商代运营一般收多少服务费
  • 做资讯网站需要哪些资质/百度推广总部电话
  • 如何更改wordpress语言/优化网站的步骤
  • 济南做兼职网站/系统优化大师下载
  • 厦门网站建设680/sem竞价
  • wordpress 两栏主题/百度词条优化工作
  • 做网站需要注册哪类商标/整合网络营销是什么
  • 网站建设水平如何评价/东莞网站制作十年乐云seo
  • 塑料机械怎么做网站/软文推广新闻发布
  • 微信公众号微网站怎么做/百度优化软件
  • 【Python修仙编程】(二) Python3灵源初探(9)
  • day066-内容分发网络(CDN)与web应用防火墙(WAF)
  • LeetCode 85:最大矩形
  • 【LeetCode 热题 100】4. 寻找两个正序数组的中位数——(解法一)线性扫描
  • Kafka Streams窗口技术全解析:从理论到电商实时分析实战
  • 2023 年 NOI 最后一题题解