Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
别团等shy哥发育
Yygh Parent
提交
8fffdca8
Y
Yygh Parent
项目概览
别团等shy哥发育
/
Yygh Parent
9 个月 前同步成功
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
Yygh Parent
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8fffdca8
编写于
1月 07, 2022
作者:
别团等shy哥发育
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
获取微信扫描人信息,httpclient整合,手机号绑定与前端整合
上级
340ff5eb
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
437 addition
and
15 deletion
+437
-15
common/common-util/pom.xml
common/common-util/pom.xml
+4
-0
service/service_user/pom.xml
service/service_user/pom.xml
+2
-1
service/service_user/src/main/java/com/atguigu/yygh/user/api/WeixinApiController.java
...n/java/com/atguigu/yygh/user/api/WeixinApiController.java
+93
-0
service/service_user/src/main/java/com/atguigu/yygh/user/service/UserInfoService.java
...n/java/com/atguigu/yygh/user/service/UserInfoService.java
+6
-1
service/service_user/src/main/java/com/atguigu/yygh/user/service/impl/UserInfoServiceImpl.java
...m/atguigu/yygh/user/service/impl/UserInfoServiceImpl.java
+34
-13
service/service_user/src/main/java/com/atguigu/yygh/user/utils/HttpClientUtils.java
...ain/java/com/atguigu/yygh/user/utils/HttpClientUtils.java
+298
-0
未找到文件。
common/common-util/pom.xml
浏览文件 @
8fffdca8
...
@@ -15,6 +15,10 @@
...
@@ -15,6 +15,10 @@
<groupId>
io.jsonwebtoken
</groupId>
<groupId>
io.jsonwebtoken
</groupId>
<artifactId>
jjwt
</artifactId>
<artifactId>
jjwt
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
org.apache.httpcomponents
</groupId>
<artifactId>
httpclient
</artifactId>
</dependency>
</dependencies>
</dependencies>
...
...
service/service_user/pom.xml
浏览文件 @
8fffdca8
...
@@ -10,6 +10,7 @@
...
@@ -10,6 +10,7 @@
<modelVersion>
4.0.0
</modelVersion>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
service_user
</artifactId>
<artifactId>
service_user
</artifactId>
<dependencies>
</dependencies>
</project>
</project>
\ No newline at end of file
service/service_user/src/main/java/com/atguigu/yygh/user/api/WeixinApiController.java
浏览文件 @
8fffdca8
package
com.atguigu.yygh.user.api
;
package
com.atguigu.yygh.user.api
;
import
com.alibaba.fastjson.JSONObject
;
import
com.atguigu.yygh.model.user.UserInfo
;
import
com.atguigu.yygh.user.service.UserInfoService
;
import
com.atguigu.yygh.user.utils.ConstantWxPropertiesUtils
;
import
com.atguigu.yygh.user.utils.ConstantWxPropertiesUtils
;
import
com.atguigu.yygh.user.utils.HttpClientUtils
;
import
com.atguigu.yygu.common.helper.JwtHelper
;
import
com.atguigu.yygu.common.result.Result
;
import
com.atguigu.yygu.common.result.Result
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.util.StringUtils
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
org.springframework.web.bind.annotation.ResponseBody
;
...
@@ -15,6 +22,8 @@ import java.util.Map;
...
@@ -15,6 +22,8 @@ import java.util.Map;
@Controller
@Controller
@RequestMapping
(
"/api/ucenter/wx"
)
@RequestMapping
(
"/api/ucenter/wx"
)
public
class
WeixinApiController
{
public
class
WeixinApiController
{
@Autowired
private
UserInfoService
userInfoService
;
//1、生成微信扫描的二维码
//1、生成微信扫描的二维码
//返回生成二维码需要参数
//返回生成二维码需要参数
...
@@ -32,4 +41,88 @@ public class WeixinApiController {
...
@@ -32,4 +41,88 @@ public class WeixinApiController {
}
}
//2、回调的方法,得到扫描人信息
//2、回调的方法,得到扫描人信息
//微信扫码后回调的方法
@GetMapping
(
"callback"
)
public
String
callback
(
String
code
,
String
state
){
//第一步 获取临时票据
System
.
out
.
println
(
"code:"
+
code
);
//第二步 拿着code和微信id和密钥,请求微信固定地址,得到两个值
//使用code和appid以及appscrect换取access_token
StringBuffer
baseAccessTokenUrl
=
new
StringBuffer
()
.
append
(
"https://api.weixin.qq.com/sns/oauth2/access_token"
)
.
append
(
"?appid=%s"
)
.
append
(
"&secret=%s"
)
.
append
(
"&code=%s"
)
.
append
(
"&grant_type=authorization_code"
);
String
accessTokenUrl
=
String
.
format
(
baseAccessTokenUrl
.
toString
(),
ConstantWxPropertiesUtils
.
WX_OPEN_APP_ID
,
ConstantWxPropertiesUtils
.
WX_OPEN_APP_SECRET
,
code
);
//使用httpclient请求这个地址
try
{
String
accesstokenInfo
=
HttpClientUtils
.
get
(
accessTokenUrl
);
System
.
out
.
println
(
"accesstokenInfo:"
+
accesstokenInfo
);
//从返回的字符串获取两个值:openid和access_token
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
accesstokenInfo
);
String
access_token
=
jsonObject
.
getString
(
"access_token"
);
String
openid
=
jsonObject
.
getString
(
"openid"
);
//判断数据库中是否已经存在微信扫码人的信息,根据openid做判断
UserInfo
userInfo
=
userInfoService
.
selectWxInfoOpenId
(
openid
);
if
(
userInfo
==
null
){
//数据库中不存在微信信息
//第三步 拿着openid和access_token请求微信地址,得到扫描人信息
String
baseUserInfoUrl
=
"https://api.weixin.qq.com/sns/userinfo"
+
"?access_token=%s"
+
"&openid=%s"
;
String
userInfoUrl
=
String
.
format
(
baseUserInfoUrl
,
access_token
,
openid
);
String
resultInfo
=
HttpClientUtils
.
get
(
userInfoUrl
);
System
.
out
.
println
(
"resultInfo:"
+
resultInfo
);
JSONObject
resultUserInfoJson
=
JSONObject
.
parseObject
(
resultInfo
);
//解析用户信息
//用户昵称
String
nickname
=
resultUserInfoJson
.
getString
(
"nickname"
);
//用户头像
String
headimgurl
=
resultUserInfoJson
.
getString
(
"headimgurl"
);
//将获取的扫描人信息添加到数据库
userInfo
=
new
UserInfo
();
userInfo
.
setNickName
(
nickname
);
userInfo
.
setOpenid
(
openid
);
userInfo
.
setStatus
(
1
);
userInfoService
.
save
(
userInfo
);
}
//返回name和token字符串
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
String
name
=
userInfo
.
getName
();
if
(
StringUtils
.
isEmpty
(
name
))
{
name
=
userInfo
.
getNickName
();
}
if
(
StringUtils
.
isEmpty
(
name
))
{
name
=
userInfo
.
getPhone
();
}
map
.
put
(
"name"
,
name
);
//判断userInfo是否有手机号,如果手机号为空,返回openid
//如果说手机号不为空,返回openid值是空字符串
//前端判断:如果openid不为空,绑定手机号,如果openid为空,不需要绑定手机号
if
(
StringUtils
.
isEmpty
(
userInfo
.
getPhone
()))
{
map
.
put
(
"openid"
,
userInfo
.
getOpenid
());
}
else
{
map
.
put
(
"openid"
,
""
);
}
//使用JWT生成token字符串
String
token
=
JwtHelper
.
createToken
(
userInfo
.
getId
(),
name
);
map
.
put
(
"token"
,
token
);
//跳转到前端页面
return
"redirect:"
+
ConstantWxPropertiesUtils
.
YYGH_BASE_URL
+
"/weixin/callback?token="
+
map
.
get
(
"token"
)+
"&openid="
+
map
.
get
(
"openid"
)+
"&name="
+
URLEncoder
.
encode
((
String
)
map
.
get
(
"name"
),
"utf-8"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
}
}
service/service_user/src/main/java/com/atguigu/yygh/user/service/UserInfoService.java
浏览文件 @
8fffdca8
package
com.atguigu.yygh.user.service
;
package
com.atguigu.yygh.user.service
;
import
com.atguigu.yygh.model.user.UserInfo
;
import
com.atguigu.yygh.vo.user.LoginVo
;
import
com.atguigu.yygh.vo.user.LoginVo
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.Map
;
import
java.util.Map
;
public
interface
UserInfoService
{
public
interface
UserInfoService
extends
IService
<
UserInfo
>
{
//用户手机号登录接口
//用户手机号登录接口
Map
<
String
,
Object
>
loginUser
(
LoginVo
loginVo
);
Map
<
String
,
Object
>
loginUser
(
LoginVo
loginVo
);
//判断数据库中是否已经存在微信扫码人的信息,根据openid做判断
UserInfo
selectWxInfoOpenId
(
String
openid
);
}
}
service/service_user/src/main/java/com/atguigu/yygh/user/service/impl/UserInfoServiceImpl.java
浏览文件 @
8fffdca8
...
@@ -35,22 +35,34 @@ public class UserInfoServiceImpl extends
...
@@ -35,22 +35,34 @@ public class UserInfoServiceImpl extends
}
}
// 判断手机验证码和输入验证码是否一致
// 判断手机验证码和输入验证码是否一致
String
redisCode
=
redisTemplate
.
opsForValue
().
get
(
phone
);
String
redisCode
=
redisTemplate
.
opsForValue
().
get
(
phone
);
System
.
out
.
println
(
"code: "
+
code
);
System
.
out
.
println
(
"redisCode: "
+
redisCode
);
if
(!
code
.
equals
(
redisCode
)){
if
(!
code
.
equals
(
redisCode
)){
throw
new
YyghException
(
ResultCodeEnum
.
CODE_ERROR
);
throw
new
YyghException
(
ResultCodeEnum
.
CODE_ERROR
);
}
}
//判断是否是第一次登陆,根据手机号查询数据库,如果不存在相同的手机号就是第一次登录
//绑定手机号码
QueryWrapper
<
UserInfo
>
wrapper
=
new
QueryWrapper
<>();
UserInfo
userInfo
=
null
;
wrapper
.
eq
(
"phone"
,
phone
);
if
(!
StringUtils
.
isEmpty
(
loginVo
.
getOpenid
()))
{
UserInfo
userInfo
=
baseMapper
.
selectOne
(
wrapper
);
userInfo
=
this
.
selectWxInfoOpenId
(
loginVo
.
getOpenid
());
if
(
userInfo
==
null
){
//第一次使用这个手机号登录
if
(
null
!=
userInfo
)
{
//添加信息到数据库中
userInfo
.
setPhone
(
loginVo
.
getPhone
());
userInfo
=
new
UserInfo
();
this
.
updateById
(
userInfo
);
userInfo
.
setName
(
""
);
}
else
{
userInfo
.
setPhone
(
phone
);
throw
new
YyghException
(
ResultCodeEnum
.
DATA_ERROR
);
userInfo
.
setStatus
(
1
);
}
baseMapper
.
insert
(
userInfo
);
}
//如果userInfo为空,进行正常的手机登录
if
(
userInfo
==
null
){
//判断是否是第一次登陆,根据手机号查询数据库,如果不存在相同的手机号就是第一次登录
QueryWrapper
<
UserInfo
>
wrapper
=
new
QueryWrapper
<>();
wrapper
.
eq
(
"phone"
,
phone
);
userInfo
=
baseMapper
.
selectOne
(
wrapper
);
if
(
userInfo
==
null
){
//第一次使用这个手机号登录
//添加信息到数据库中
userInfo
=
new
UserInfo
();
userInfo
.
setName
(
""
);
userInfo
.
setPhone
(
phone
);
userInfo
.
setStatus
(
1
);
baseMapper
.
insert
(
userInfo
);
}
}
}
//校验是否被禁用
//校验是否被禁用
if
(
userInfo
.
getStatus
()
==
0
)
{
if
(
userInfo
.
getStatus
()
==
0
)
{
...
@@ -74,4 +86,13 @@ public class UserInfoServiceImpl extends
...
@@ -74,4 +86,13 @@ public class UserInfoServiceImpl extends
map
.
put
(
"token"
,
token
);
map
.
put
(
"token"
,
token
);
return
map
;
return
map
;
}
}
//判断数据库中是否已经存在微信扫码人的信息,根据openid做判断
@Override
public
UserInfo
selectWxInfoOpenId
(
String
openid
)
{
QueryWrapper
<
UserInfo
>
wrapper
=
new
QueryWrapper
();
wrapper
.
eq
(
"openid"
,
openid
);
UserInfo
userInfo
=
baseMapper
.
selectOne
(
wrapper
);
return
userInfo
;
}
}
}
service/service_user/src/main/java/com/atguigu/yygh/user/utils/HttpClientUtils.java
0 → 100644
浏览文件 @
8fffdca8
package
com.atguigu.yygh.user.utils
;
import
org.apache.commons.io.IOUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.http.Consts
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.HttpResponse
;
import
org.apache.http.NameValuePair
;
import
org.apache.http.client.HttpClient
;
import
org.apache.http.client.config.RequestConfig
;
import
org.apache.http.client.config.RequestConfig.Builder
;
import
org.apache.http.client.entity.UrlEncodedFormEntity
;
import
org.apache.http.client.methods.HttpGet
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.conn.ConnectTimeoutException
;
import
org.apache.http.conn.ssl.SSLConnectionSocketFactory
;
import
org.apache.http.conn.ssl.SSLContextBuilder
;
import
org.apache.http.conn.ssl.TrustStrategy
;
import
org.apache.http.conn.ssl.X509HostnameVerifier
;
import
org.apache.http.entity.ContentType
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.impl.conn.PoolingHttpClientConnectionManager
;
import
org.apache.http.message.BasicNameValuePair
;
import
javax.net.ssl.SSLContext
;
import
javax.net.ssl.SSLException
;
import
javax.net.ssl.SSLSession
;
import
javax.net.ssl.SSLSocket
;
import
java.io.IOException
;
import
java.net.SocketTimeoutException
;
import
java.security.GeneralSecurityException
;
import
java.security.cert.CertificateException
;
import
java.security.cert.X509Certificate
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
public
class
HttpClientUtils
{
public
static
final
int
connTimeout
=
10000
;
public
static
final
int
readTimeout
=
10000
;
public
static
final
String
charset
=
"UTF-8"
;
private
static
HttpClient
client
=
null
;
static
{
PoolingHttpClientConnectionManager
cm
=
new
PoolingHttpClientConnectionManager
();
cm
.
setMaxTotal
(
128
);
cm
.
setDefaultMaxPerRoute
(
128
);
client
=
HttpClients
.
custom
().
setConnectionManager
(
cm
).
build
();
}
public
static
String
postParameters
(
String
url
,
String
parameterStr
)
throws
ConnectTimeoutException
,
SocketTimeoutException
,
Exception
{
return
post
(
url
,
parameterStr
,
"application/x-www-form-urlencoded"
,
charset
,
connTimeout
,
readTimeout
);
}
public
static
String
postParameters
(
String
url
,
String
parameterStr
,
String
charset
,
Integer
connTimeout
,
Integer
readTimeout
)
throws
ConnectTimeoutException
,
SocketTimeoutException
,
Exception
{
return
post
(
url
,
parameterStr
,
"application/x-www-form-urlencoded"
,
charset
,
connTimeout
,
readTimeout
);
}
public
static
String
postParameters
(
String
url
,
Map
<
String
,
String
>
params
)
throws
ConnectTimeoutException
,
SocketTimeoutException
,
Exception
{
return
postForm
(
url
,
params
,
null
,
connTimeout
,
readTimeout
);
}
public
static
String
postParameters
(
String
url
,
Map
<
String
,
String
>
params
,
Integer
connTimeout
,
Integer
readTimeout
)
throws
ConnectTimeoutException
,
SocketTimeoutException
,
Exception
{
return
postForm
(
url
,
params
,
null
,
connTimeout
,
readTimeout
);
}
public
static
String
get
(
String
url
)
throws
Exception
{
return
get
(
url
,
charset
,
null
,
null
);
}
public
static
String
get
(
String
url
,
String
charset
)
throws
Exception
{
return
get
(
url
,
charset
,
connTimeout
,
readTimeout
);
}
/**
* 发送一个 Post 请求, 使用指定的字符集编码.
*
* @param url
* @param body RequestBody
* @param mimeType 例如 application/xml "application/x-www-form-urlencoded" a=1&b=2&c=3
* @param charset 编码
* @param connTimeout 建立链接超时时间,毫秒.
* @param readTimeout 响应超时时间,毫秒.
* @return ResponseBody, 使用指定的字符集编码.
* @throws ConnectTimeoutException 建立链接超时异常
* @throws SocketTimeoutException 响应超时
* @throws Exception
*/
public
static
String
post
(
String
url
,
String
body
,
String
mimeType
,
String
charset
,
Integer
connTimeout
,
Integer
readTimeout
)
throws
ConnectTimeoutException
,
SocketTimeoutException
,
Exception
{
HttpClient
client
=
null
;
HttpPost
post
=
new
HttpPost
(
url
);
String
result
=
""
;
try
{
if
(
StringUtils
.
isNotBlank
(
body
))
{
HttpEntity
entity
=
new
StringEntity
(
body
,
ContentType
.
create
(
mimeType
,
charset
));
post
.
setEntity
(
entity
);
}
// 设置参数
Builder
customReqConf
=
RequestConfig
.
custom
();
if
(
connTimeout
!=
null
)
{
customReqConf
.
setConnectTimeout
(
connTimeout
);
}
if
(
readTimeout
!=
null
)
{
customReqConf
.
setSocketTimeout
(
readTimeout
);
}
post
.
setConfig
(
customReqConf
.
build
());
HttpResponse
res
;
if
(
url
.
startsWith
(
"https"
))
{
// 执行 Https 请求.
client
=
createSSLInsecureClient
();
res
=
client
.
execute
(
post
);
}
else
{
// 执行 Http 请求.
client
=
HttpClientUtils
.
client
;
res
=
client
.
execute
(
post
);
}
result
=
IOUtils
.
toString
(
res
.
getEntity
().
getContent
(),
charset
);
}
finally
{
post
.
releaseConnection
();
if
(
url
.
startsWith
(
"https"
)
&&
client
!=
null
&&
client
instanceof
CloseableHttpClient
)
{
((
CloseableHttpClient
)
client
).
close
();
}
}
return
result
;
}
/**
* 提交form表单
*
* @param url
* @param params
* @param connTimeout
* @param readTimeout
* @return
* @throws ConnectTimeoutException
* @throws SocketTimeoutException
* @throws Exception
*/
public
static
String
postForm
(
String
url
,
Map
<
String
,
String
>
params
,
Map
<
String
,
String
>
headers
,
Integer
connTimeout
,
Integer
readTimeout
)
throws
ConnectTimeoutException
,
SocketTimeoutException
,
Exception
{
HttpClient
client
=
null
;
HttpPost
post
=
new
HttpPost
(
url
);
try
{
if
(
params
!=
null
&&
!
params
.
isEmpty
())
{
List
<
NameValuePair
>
formParams
=
new
ArrayList
<
NameValuePair
>();
Set
<
Entry
<
String
,
String
>>
entrySet
=
params
.
entrySet
();
for
(
Entry
<
String
,
String
>
entry
:
entrySet
)
{
formParams
.
add
(
new
BasicNameValuePair
(
entry
.
getKey
(),
entry
.
getValue
()));
}
UrlEncodedFormEntity
entity
=
new
UrlEncodedFormEntity
(
formParams
,
Consts
.
UTF_8
);
post
.
setEntity
(
entity
);
}
if
(
headers
!=
null
&&
!
headers
.
isEmpty
())
{
for
(
Entry
<
String
,
String
>
entry
:
headers
.
entrySet
())
{
post
.
addHeader
(
entry
.
getKey
(),
entry
.
getValue
());
}
}
// 设置参数
Builder
customReqConf
=
RequestConfig
.
custom
();
if
(
connTimeout
!=
null
)
{
customReqConf
.
setConnectTimeout
(
connTimeout
);
}
if
(
readTimeout
!=
null
)
{
customReqConf
.
setSocketTimeout
(
readTimeout
);
}
post
.
setConfig
(
customReqConf
.
build
());
HttpResponse
res
=
null
;
if
(
url
.
startsWith
(
"https"
))
{
// 执行 Https 请求.
client
=
createSSLInsecureClient
();
res
=
client
.
execute
(
post
);
}
else
{
// 执行 Http 请求.
client
=
HttpClientUtils
.
client
;
res
=
client
.
execute
(
post
);
}
return
IOUtils
.
toString
(
res
.
getEntity
().
getContent
(),
"UTF-8"
);
}
finally
{
post
.
releaseConnection
();
if
(
url
.
startsWith
(
"https"
)
&&
client
!=
null
&&
client
instanceof
CloseableHttpClient
)
{
((
CloseableHttpClient
)
client
).
close
();
}
}
}
/**
* 发送一个 GET 请求
*/
public
static
String
get
(
String
url
,
String
charset
,
Integer
connTimeout
,
Integer
readTimeout
)
throws
ConnectTimeoutException
,
SocketTimeoutException
,
Exception
{
HttpClient
client
=
null
;
HttpGet
get
=
new
HttpGet
(
url
);
String
result
=
""
;
try
{
// 设置参数
Builder
customReqConf
=
RequestConfig
.
custom
();
if
(
connTimeout
!=
null
)
{
customReqConf
.
setConnectTimeout
(
connTimeout
);
}
if
(
readTimeout
!=
null
)
{
customReqConf
.
setSocketTimeout
(
readTimeout
);
}
get
.
setConfig
(
customReqConf
.
build
());
HttpResponse
res
=
null
;
if
(
url
.
startsWith
(
"https"
))
{
// 执行 Https 请求.
client
=
createSSLInsecureClient
();
res
=
client
.
execute
(
get
);
}
else
{
// 执行 Http 请求.
client
=
HttpClientUtils
.
client
;
res
=
client
.
execute
(
get
);
}
result
=
IOUtils
.
toString
(
res
.
getEntity
().
getContent
(),
charset
);
}
finally
{
get
.
releaseConnection
();
if
(
url
.
startsWith
(
"https"
)
&&
client
!=
null
&&
client
instanceof
CloseableHttpClient
)
{
((
CloseableHttpClient
)
client
).
close
();
}
}
return
result
;
}
/**
* 从 response 里获取 charset
*/
@SuppressWarnings
(
"unused"
)
private
static
String
getCharsetFromResponse
(
HttpResponse
ressponse
)
{
// Content-Type:text/html; charset=GBK
if
(
ressponse
.
getEntity
()
!=
null
&&
ressponse
.
getEntity
().
getContentType
()
!=
null
&&
ressponse
.
getEntity
().
getContentType
().
getValue
()
!=
null
)
{
String
contentType
=
ressponse
.
getEntity
().
getContentType
().
getValue
();
if
(
contentType
.
contains
(
"charset="
))
{
return
contentType
.
substring
(
contentType
.
indexOf
(
"charset="
)
+
8
);
}
}
return
null
;
}
/**
* 创建 SSL连接
* @return
* @throws GeneralSecurityException
*/
private
static
CloseableHttpClient
createSSLInsecureClient
()
throws
GeneralSecurityException
{
try
{
SSLContext
sslContext
=
new
SSLContextBuilder
().
loadTrustMaterial
(
null
,
new
TrustStrategy
()
{
public
boolean
isTrusted
(
X509Certificate
[]
chain
,
String
authType
)
throws
CertificateException
{
return
true
;
}
}).
build
();
SSLConnectionSocketFactory
sslsf
=
new
SSLConnectionSocketFactory
(
sslContext
,
new
X509HostnameVerifier
()
{
@Override
public
boolean
verify
(
String
arg0
,
SSLSession
arg1
)
{
return
true
;
}
@Override
public
void
verify
(
String
host
,
SSLSocket
ssl
)
throws
IOException
{
}
@Override
public
void
verify
(
String
host
,
X509Certificate
cert
)
throws
SSLException
{
}
@Override
public
void
verify
(
String
host
,
String
[]
cns
,
String
[]
subjectAlts
)
throws
SSLException
{
}
});
return
HttpClients
.
custom
().
setSSLSocketFactory
(
sslsf
).
build
();
}
catch
(
GeneralSecurityException
e
)
{
throw
e
;
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录