Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
C
common
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
曲欣亮
common
Commits
38334d5a
Commit
38334d5a
authored
Jul 25, 2019
by
Quxl
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://key@gitlab.egolm.com/key/common.git
parents
bcfe718f
aa71e6cf
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
582 additions
and
526 deletions
+582
-526
DateUtil.java
src/main/java/com/egolm/common/DateUtil.java
+200
-147
HttpUtil.java
src/main/java/com/egolm/common/HttpUtil.java
+382
-379
No files found.
src/main/java/com/egolm/common/DateUtil.java
View file @
38334d5a
...
...
@@ -15,7 +15,7 @@ import java.util.regex.Matcher;
import
java.util.regex.Pattern
;
public
class
DateUtil
{
public
static
final
String
FMT_HH
=
"HH"
;
public
static
final
String
FMT_DATE_HH
=
"yyyy-MM-dd HH"
;
public
static
final
String
FMT_TIME
=
"HH:mm:ss"
;
...
...
@@ -31,43 +31,55 @@ public class DateUtil {
public
static
final
String
FMT_DATE_ISO
=
"yyyy-MM-ddTHH:mm:ss.SSSZ"
;
public
static
final
String
FMT_UTC_GMT
=
"EEE, dd MMM yyyy HH:mm:ss z"
;
public
static
final
String
FMT_YYYYMMddHHMMSS
=
"yyyyMMddHHmmss"
;
public
static
final
String
FMT_UTC_ALIYUN
=
"YYYY-MM-DD'T'hh:mm:ss'Z'"
;
public
static
final
String
FMT_YYYY_MM
=
"yyyy-MM"
;
public
static
final
String
FMT_UTC_ALIYUN
=
"YYYY-MM-DD'T'hh:mm:ss'Z'"
;
public
static
final
String
FMT_YYYY_MM
=
"yyyy-MM"
;
public
static
final
Long
SECOND
=
1000L
;
public
static
final
Long
MINUTE
=
1000L
*
60
;
public
static
final
Long
HALF_HOUR
=
MINUTE
*
30
;
public
static
final
Long
HOUR
=
HALF_HOUR
*
2
;
public
static
final
Long
HALF_DAY
=
HOUR
*
12
;
public
static
final
Long
DAY
=
HALF_DAY
*
2
;
public
static
final
Long
MINUTE
=
1000L
*
60
;
public
static
final
Long
HALF_HOUR
=
MINUTE
*
30
;
public
static
final
Long
HOUR
=
HALF_HOUR
*
2
;
public
static
final
Long
HALF_DAY
=
HOUR
*
12
;
public
static
final
Long
DAY
=
HALF_DAY
*
2
;
private
static
final
Map
<
Pattern
,
String
>
PATTERN_DATE
=
new
LinkedHashMap
<
Pattern
,
String
>();
static
{
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日\\s+\\d{1,2}时\\d{1,2}分\\d{1,2}秒)"
),
"yyyy年MM月dd日 HH时mm分ss秒"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
"yyyy年MM月dd日 HH:mm:ss"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日)"
),
"yyyy年MM月dd日"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日\\s+\\d{1,2}时\\d{1,2}分\\d{1,2}秒)"
),
"yyyy年MM月dd日 HH时mm分ss秒"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
"yyyy年MM月dd日 HH:mm:ss"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月(([0]?[1-9])|([1-2][0-9])|([3][0-1]))日)"
),
"yyyy年MM月dd日"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年(([0]?[1-9])|([1][0-2]))月)"
),
"yyyy年MM月"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})年)"
),
"yyyy年"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z)"
),
DateUtil
.
FMT_DATE_ISO
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_A_DATE_SECOND
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_A_DATE_MINUTE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_A_DATE_SECOND
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_A_DATE_MINUTE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}/\\d{1,2}/\\d{1,2})"
),
DateUtil
.
FMT_A_DATE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_DATE_SECOND
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_DATE_SECOND
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2}\\s+\\d{1,2}:\\d{1,2})"
),
DateUtil
.
FMT_DATE_MINUTE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(\\d{4}-\\d{1,2}-\\d{1,2})"
),
DateUtil
.
FMT_DATE
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1])))"
),
"yyyyMMdd"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1])))"
),
"yyyyMMdd"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"(([1-2][0-9]{3})(([0][1-9])|([1][0-2])))"
),
"yyyyMM"
);
PATTERN_DATE
.
put
(
Pattern
.
compile
(
"([1-2][0-9]{3})"
),
"yyyy"
);
}
/**
* 将日期字符串转化成日期类型
*
* @param date
* @param fmt
* @return
...
...
@@ -82,23 +94,24 @@ public class DateUtil {
throw
new
RuntimeException
(
date
+
" parse to"
+
fmt
,
e
);
}
}
/**
* 自动判断日期字符串格式并将其转化为日期类型
*
* @param str
* @return
*/
public
static
Date
parse
(
Object
obj
)
{
if
(
obj
instanceof
Date
)
{
return
new
Date
(((
Date
)
obj
).
getTime
());
if
(
obj
instanceof
Date
)
{
return
new
Date
(((
Date
)
obj
).
getTime
());
}
else
{
String
str
=
String
.
valueOf
(
obj
).
trim
();
if
(
StringUtil
.
isNotEmpty
(
str
))
{
for
(
Pattern
pattern
:
PATTERN_DATE
.
keySet
())
{
if
(
StringUtil
.
isNotEmpty
(
str
))
{
for
(
Pattern
pattern
:
PATTERN_DATE
.
keySet
())
{
Matcher
matcher
=
pattern
.
matcher
(
str
);
if
(
matcher
.
find
())
{
if
(
matcher
.
find
())
{
String
date_str
=
matcher
.
group
(
1
);
if
(
PATTERN_DATE
.
get
(
pattern
).
equals
(
DateUtil
.
FMT_DATE_ISO
))
{
if
(
PATTERN_DATE
.
get
(
pattern
).
equals
(
DateUtil
.
FMT_DATE_ISO
))
{
return
parseISODate
(
date_str
);
}
else
{
return
parse
(
date_str
,
PATTERN_DATE
.
get
(
pattern
));
...
...
@@ -109,27 +122,27 @@ public class DateUtil {
return
null
;
}
}
public
static
Date
parseISODate
(
String
isoDate
)
{
isoDate
=
isoDate
.
replace
(
"T"
,
" "
).
replace
(
"Z"
,
""
);
Date
date
=
parse
(
isoDate
);
java
.
util
.
Calendar
cal
=
java
.
util
.
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
int
zoneOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
ZONE_OFFSET
);
int
dstOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
DST_OFFSET
);
cal
.
add
(
Calendar
.
MILLISECOND
,
(
zoneOffset
+
dstOffset
));
return
cal
.
getTime
();
}
java
.
util
.
Calendar
cal
=
java
.
util
.
Calendar
.
getInstance
();
cal
.
setTime
(
date
);
int
zoneOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
ZONE_OFFSET
);
int
dstOffset
=
cal
.
get
(
java
.
util
.
Calendar
.
DST_OFFSET
);
cal
.
add
(
Calendar
.
MILLISECOND
,
(
zoneOffset
+
dstOffset
));
return
cal
.
getTime
();
}
public
static
boolean
isDate
(
Object
obj
)
{
if
(
obj
instanceof
Date
)
{
if
(
obj
instanceof
Date
)
{
return
true
;
}
else
{
String
str
=
String
.
valueOf
(
obj
);
if
(
StringUtil
.
isNotEmpty
(
str
))
{
if
(
StringUtil
.
isNotEmpty
(
str
))
{
String
date_str
=
str
.
trim
();
for
(
Pattern
pattern
:
PATTERN_DATE
.
keySet
())
{
if
(
pattern
.
matcher
(
date_str
).
find
())
{
for
(
Pattern
pattern
:
PATTERN_DATE
.
keySet
())
{
if
(
pattern
.
matcher
(
date_str
).
find
())
{
return
true
;
}
}
...
...
@@ -137,33 +150,36 @@ public class DateUtil {
return
false
;
}
}
/**
* 格式化日期为字符串
*
* @param date
* @param fmt
* @return
*/
public
static
String
format
(
Date
date
,
String
fmt
)
{
if
(
date
==
null
)
{
if
(
date
==
null
)
{
return
null
;
}
else
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
return
sdf
.
format
(
date
);
}
}
/**
* 格式化为yyyy-MM-dd格式
* @param date 时间参数
*
* @param date 时间参数
* @return yyyy-MM-dd
*/
public
static
String
formatDate
(
Date
date
)
{
return
format
(
date
,
DateUtil
.
FMT_DATE
);
}
/**
* 格式化日期为yyyy-MM-dd HH:mm:ss格式
*
* @param date
* @return yyyy-MM-dd HH:mm:ss
*/
...
...
@@ -171,27 +187,27 @@ public class DateUtil {
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
DateUtil
.
FMT_DATE_SECOND
);
return
sdf
.
format
(
date
);
}
public
static
String
formatUTCDate
(
Date
date
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"EEE, dd MMM yyyy HH:mm:ss z"
,
Locale
.
ENGLISH
);
dateFormat
.
setTimeZone
(
new
SimpleTimeZone
(
0
,
"UTC"
));
return
dateFormat
.
format
(
date
);
dateFormat
.
setTimeZone
(
new
SimpleTimeZone
(
0
,
"UTC"
));
return
dateFormat
.
format
(
date
);
}
public
static
String
formatGMTDate
(
Date
date
)
{
SimpleDateFormat
dateFormat
=
new
SimpleDateFormat
(
"EEE, dd MMM yyyy HH:mm:ss z"
,
Locale
.
ENGLISH
);
dateFormat
.
setTimeZone
(
new
SimpleTimeZone
(
0
,
"GMT"
));
return
dateFormat
.
format
(
date
);
dateFormat
.
setTimeZone
(
new
SimpleTimeZone
(
0
,
"GMT"
));
return
dateFormat
.
format
(
date
);
}
/**
* 将毫秒数格式化成默认格式日期字符串
*
默认格式:yyyy-MM-dd HH:mm:ss
* 将毫秒数格式化成默认格式日期字符串
默认格式:yyyy-MM-dd HH:mm:ss
*
* @param time
* @return
*/
public
static
String
format
(
Long
time
)
{
if
(
time
!=
null
)
{
if
(
time
!=
null
)
{
Date
date
=
new
Date
(
time
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
DateUtil
.
FMT_DATE_SECOND
);
return
sdf
.
format
(
date
);
...
...
@@ -199,15 +215,16 @@ public class DateUtil {
return
null
;
}
}
/**
* 将毫秒数格式化为制定格式的日期字符串
*
* @param time
* @param fmt
* @return
*/
public
static
String
format
(
Long
time
,
String
fmt
)
{
if
(
time
!=
null
)
{
if
(
time
!=
null
)
{
Date
date
=
new
Date
(
time
);
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
return
sdf
.
format
(
date
);
...
...
@@ -217,26 +234,26 @@ public class DateUtil {
}
/**
* 将毫秒数格式化为时间格式字符串
*
毫秒数必须小于86400000
* 将毫秒数格式化为时间格式字符串
毫秒数必须小于86400000
*
* @param time
* @return
*/
public
static
String
format
(
Integer
time
)
{
return
format
(
time
,
DateUtil
.
FMT_TIME
);
}
/**
* 将毫秒数格式化为时间格式字符串
*
毫秒数必须小于86400000
* 将毫秒数格式化为时间格式字符串
毫秒数必须小于86400000
*
* @param time
* @param fmt
* @return
*/
public
static
String
format
(
Integer
time
,
String
fmt
)
{
if
(
time
!=
null
)
{
if
(
time
<
86400000
)
{
Date
date
=
new
Date
(
time
-
(
1000
*
60
*
60
*
8
));
if
(
time
!=
null
)
{
if
(
time
<
86400000
)
{
Date
date
=
new
Date
(
time
-
(
1000
*
60
*
60
*
8
));
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
fmt
);
return
sdf
.
format
(
date
);
}
else
{
...
...
@@ -246,9 +263,10 @@ public class DateUtil {
return
null
;
}
}
/**
* 计算指定时间当天的开始时间
*
* @param time
* @return
* @throws ParseException
...
...
@@ -257,59 +275,64 @@ public class DateUtil {
Long
start
=
start
(
time
==
null
?
new
Date
()
:
time
).
getTime
();
return
new
Date
(
start
+
HALF_DAY
);
}
/**
* 计算指定时间当天的开始时间
*
* @param time
* @return
* @throws ParseException
*/
public
static
Date
start
(
Date
time
)
{
if
(
time
!=
null
)
{
if
(
time
!=
null
)
{
return
parse
(
format
(
time
,
DateUtil
.
FMT_DATE
),
DateUtil
.
FMT_DATE
);
}
else
{
return
null
;
}
}
/**
* 计算指定日期当天的最后时间
*
* @param time
* @return
* @throws ParseException
* @throws ParseException
*/
public
static
Date
end
(
Date
time
)
{
if
(
time
!=
null
)
{
return
new
Date
(
start
(
new
Date
(
time
.
getTime
()
+
(
24L
*
60L
*
60L
*
1000L
))).
getTime
());
if
(
time
!=
null
)
{
return
new
Date
(
start
(
new
Date
(
time
.
getTime
()
+
(
24L
*
60L
*
60L
*
1000L
))).
getTime
());
}
else
{
return
null
;
}
}
/**
* 取得当前时间向后或向前若干天的时间
*
* @param time
* @param offset
* @return
*/
public
static
Date
day
(
Date
time
,
Integer
offset
)
{
Date
date
=
new
Date
(
time
.
getTime
()
+
(
offset
*
86400000L
));
Date
date
=
new
Date
(
time
.
getTime
()
+
(
offset
*
86400000L
));
return
date
;
}
/**
* 计算指定的日期是星期几,返回数字 周日至周六分别是0-6
*
* @param date
* @return
*/
public
static
Integer
week
(
Date
date
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
setTime
(
date
);
return
calendar
.
get
(
Calendar
.
DAY_OF_WEEK
)
-
1
;
}
/**
* 计算两天之间相隔多少天
*
* @param start
* @param end
* @return
...
...
@@ -317,11 +340,12 @@ public class DateUtil {
public
static
Integer
days
(
Date
start
,
Date
end
)
{
Date
date_start
=
start
(
start
);
Date
date_end
=
start
(
end
);
return
(
int
)((
date_end
.
getTime
()
-
date_start
.
getTime
())
/
86400000L
);
return
(
int
)
((
date_end
.
getTime
()
-
date_start
.
getTime
())
/
86400000L
);
}
/**
* 判断是否是今天
*
* @param date
* @return
*/
...
...
@@ -329,87 +353,93 @@ public class DateUtil {
Date
today
=
new
Date
();
Date
start
=
start
(
today
);
Date
end
=
end
(
today
);
if
(
date
.
getTime
()
>=
start
.
getTime
()
&&
date
.
getTime
()
<
end
.
getTime
())
{
if
(
date
.
getTime
()
>=
start
.
getTime
()
&&
date
.
getTime
()
<
end
.
getTime
())
{
return
true
;
}
else
{
return
false
;
}
}
/**
* 取得当前日期是多少周
* @param date
* @return
*/
* 取得当前日期是多少周
*
* @param date
* @return
*/
public
static
int
getWeekOfYear
(
Date
date
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
setFirstDayOfWeek
(
Calendar
.
MONDAY
);
c
.
setMinimalDaysInFirstWeek
(
7
);
c
.
setTime
(
date
);
c
.
setTime
(
date
);
return
c
.
get
(
Calendar
.
WEEK_OF_YEAR
);
}
/**
* 得到某一年周的总数
* @param year
* @return
*/
public
static
int
getMaxWeekNumOfYear
(
int
year
)
{
* 得到某一年周的总数
*
* @param year
* @return
*/
public
static
int
getMaxWeekNumOfYear
(
int
year
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
set
(
year
,
Calendar
.
DECEMBER
,
31
,
23
,
59
,
59
);
return
getWeekOfYear
(
c
.
getTime
());
}
/**
* 得到某年某周的第一天
* @param year
* @param week
* @return
*/
* 得到某年某周的第一天
*
* @param year
* @param week
* @return
*/
public
static
Date
getFirstDayOfWeek
(
int
year
,
int
week
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
set
(
Calendar
.
YEAR
,
year
);
c
.
set
(
Calendar
.
MONTH
,
Calendar
.
JANUARY
);
c
.
set
(
Calendar
.
MONTH
,
Calendar
.
JANUARY
);
c
.
set
(
Calendar
.
DATE
,
1
);
Calendar
cal
=
(
GregorianCalendar
)
c
.
clone
();
cal
.
add
(
Calendar
.
DATE
,
week
*
7
);
return
getFirstDayOfWeek
(
cal
.
getTime
());
return
getFirstDayOfWeek
(
cal
.
getTime
());
}
/**
* 得到某年某周的最后一天
* @param year
* @param week
* @return
*/
* 得到某年某周的最后一天
*
* @param year
* @param week
* @return
*/
public
static
Date
getLastDayOfWeek
(
int
year
,
int
week
)
{
Calendar
c
=
new
GregorianCalendar
();
Calendar
c
=
new
GregorianCalendar
();
c
.
set
(
Calendar
.
YEAR
,
year
);
c
.
set
(
Calendar
.
MONTH
,
Calendar
.
JANUARY
);
c
.
set
(
Calendar
.
DATE
,
1
);
Calendar
cal
=
(
GregorianCalendar
)
c
.
clone
();
cal
.
add
(
Calendar
.
DATE
,
week
*
7
);
cal
.
add
(
Calendar
.
DATE
,
week
*
7
);
return
getLastDayOfWeek
(
cal
.
getTime
());
}
/**
* 取得当前日期所在周的第一天
* @param date
* @return
*/
public
static
Date
getFirstDayOfWeek
(
Date
date
)
{
* 取得当前日期所在周的第一天
*
* @param date
* @return
*/
public
static
Date
getFirstDayOfWeek
(
Date
date
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
setFirstDayOfWeek
(
Calendar
.
MONDAY
);
c
.
setTime
(
date
);
c
.
set
(
Calendar
.
DAY_OF_WEEK
,
c
.
getFirstDayOfWeek
());
// Monday
return
c
.
getTime
();
return
c
.
getTime
();
}
/**
* 取得当前日期所在周的最后一天
* @param date
* @return
*/
* 取得当前日期所在周的最后一天
*
* @param date
* @return
*/
public
static
Date
getLastDayOfWeek
(
Date
date
)
{
Calendar
c
=
new
GregorianCalendar
();
c
.
setFirstDayOfWeek
(
Calendar
.
MONDAY
);
...
...
@@ -417,67 +447,70 @@ public class DateUtil {
c
.
set
(
Calendar
.
DAY_OF_WEEK
,
c
.
getFirstDayOfWeek
()
+
6
);
return
c
.
getTime
();
}
/**
* 取得当前日期所在月的第一天
*
* @param date
* @return
*/
public
static
Date
getFirstDayOfMonth
(
Date
date
){
Calendar
c
=
Calendar
.
getInstance
();
c
.
add
(
Calendar
.
MONTH
,
0
);
c
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
//设置为1号,当前日期既为本月第一天
public
static
Date
getFirstDayOfMonth
(
Date
date
)
{
Calendar
c
=
Calendar
.
getInstance
();
c
.
add
(
Calendar
.
MONTH
,
0
);
c
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
// 设置为1号,当前日期既为本月第一天
return
c
.
getTime
();
}
/**
* 获取指定日期下个月的第一天 的日期
* @param dateStr
* @param format
* @return
*/
public
static
String
getFirstDayOfNextMonth
(
String
dateStr
,
String
format
){
/**
*
* * 获取指定日期下个月的第一天 的日期
*
* @param dateStr
* @param format
* @return
*/
public
static
String
getFirstDayOfNextMonth
(
String
dateStr
,
String
format
)
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
format
);
try
{
Date
date
=
sdf
.
parse
(
dateStr
);
Calendar
calendar
=
Calendar
.
getInstance
();
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
date
);
calendar
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
calendar
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
calendar
.
add
(
Calendar
.
MONTH
,
1
);
return
sdf
.
format
(
calendar
.
getTime
());
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
static
String
getLastMonth
(
String
format
,
int
month
)
{
}
public
static
String
getLastMonth
(
String
format
,
int
month
)
{
try
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
format
);
//
获取前一个月第一天
//
获取前一个月第一天
Calendar
calendar1
=
Calendar
.
getInstance
();
calendar1
.
add
(
Calendar
.
MONTH
,
month
);
calendar1
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
return
sdf
.
format
(
calendar1
.
getTime
());
}
catch
(
Exception
e
)
{
calendar1
.
set
(
Calendar
.
DAY_OF_MONTH
,
1
);
return
sdf
.
format
(
calendar1
.
getTime
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
return
null
;
}
public
static
String
getTimeStamp
()
{
return
String
.
valueOf
(
System
.
currentTimeMillis
()
/
1000
);
}
/**
* 获取指定小时前的日期
*/
public
static
String
beforeHourDay
(
String
fmt
,
int
hour
)
{
public
static
String
beforeHourDay
(
String
fmt
,
int
hour
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
HOUR_OF_DAY
,
calendar
.
get
(
Calendar
.
HOUR_OF_DAY
)
-
hour
);
return
format
(
calendar
.
getTime
(),
fmt
);
}
/**
* 取得当前时间向后或向前若干天的时间
*
...
...
@@ -489,7 +522,7 @@ public class DateUtil {
Date
date
=
new
Date
(
new
Date
().
getTime
()
+
(
offset
*
86400000L
));
return
format
(
date
,
fmt
);
}
/**
* 获取两个日期字符串之间的日期集合
* @param startTime:String
...
...
@@ -521,6 +554,26 @@ public class DateUtil {
e
.
printStackTrace
();
}
return
list
;
}
}
/**
* 时间加8小时,时区问题
* <p>Title: </p>
* <p>Description: </p>
* @param time
* @return
*/
public
static
String
formatTimeEight
(
String
time
)
{
String
newTime
=
time
;
try
{
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
FMT_DATE_SECOND
);
Date
d
=
sdf
.
parse
(
time
);
long
rightTime
=
(
long
)
(
d
.
getTime
()
+
8
*
60
*
60
*
1000
);
newTime
=
sdf
.
format
(
rightTime
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
newTime
;
}
}
src/main/java/com/egolm/common/HttpUtil.java
View file @
38334d5a
package
com
.
egolm
.
common
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.io.UnsupportedEncodingException
;
import
java.net.HttpURLConnection
;
import
java.net.Proxy
;
import
java.net.URL
;
import
java.net.URLEncoder
;
import
java.security.cert.CertificateException
;
import
java.security.cert.X509Certificate
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
javax.net.ssl.HttpsURLConnection
;
import
javax.net.ssl.SSLContext
;
import
javax.net.ssl.TrustManager
;
import
javax.net.ssl.X509TrustManager
;
import
com.egolm.common.exception.HttpRequestException
;
import
com.egolm.common.exception.HttpResponseException
;
import
com.egolm.common.exception.HttpUrlEncodingException
;
/**
*
* @author 曲欣亮
* @since 2015-04-01
*
*/
public
class
HttpUtil
{
static
{
System
.
setProperty
(
"sun.net.http.allowRestrictedHeaders"
,
"true"
);
}
private
static
final
String
charset
=
"utf-8"
;
private
static
SSLContext
sslContextDefault
=
null
;
private
static
class
TrustAnyTrustManager
implements
X509TrustManager
{
public
void
checkClientTrusted
(
X509Certificate
[]
chain
,
String
authType
)
throws
CertificateException
{
}
public
void
checkServerTrusted
(
X509Certificate
[]
chain
,
String
authType
)
throws
CertificateException
{
}
public
X509Certificate
[]
getAcceptedIssuers
()
{
return
new
X509Certificate
[]
{};
}
}
private
static
SSLContext
getDefaultSSLContext
()
{
if
(
sslContextDefault
==
null
)
{
try
{
sslContextDefault
=
SSLContext
.
getInstance
(
"SSL"
);
sslContextDefault
.
init
(
null
,
new
TrustManager
[]
{
new
TrustAnyTrustManager
()
},
new
java
.
security
.
SecureRandom
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
return
sslContextDefault
;
}
private
static
HttpURLConnection
createConnection
(
String
requestUrl
,
Proxy
proxy
)
throws
IOException
{
URL
HTTP_URL
=
new
URL
(
requestUrl
);
HttpURLConnection
connection
=
(
HttpURLConnection
)
(
proxy
==
null
?
HTTP_URL
.
openConnection
()
:
HTTP_URL
.
openConnection
(
proxy
));
if
(
requestUrl
.
startsWith
(
"https"
))
{
((
HttpsURLConnection
)
connection
).
setSSLSocketFactory
(
getDefaultSSLContext
().
getSocketFactory
());
}
return
connection
;
}
public
static
String
get
(
String
requestUrl
)
throws
HttpRequestException
{
return
HttpUtil
.
get
(
requestUrl
,
null
,
null
,
null
);
}
public
static
String
get
(
String
requestUrl
,
Map
<?,
?>
parameters
)
throws
HttpRequestException
{
return
HttpUtil
.
get
(
requestUrl
,
parameters
,
null
,
null
);
}
public
static
String
get
(
String
requestUrl
,
Map
<?,
?>
parameters
,
Map
<
String
,
String
>
header
)
throws
HttpRequestException
{
return
HttpUtil
.
get
(
requestUrl
,
parameters
,
header
,
null
);
}
public
static
String
get
(
String
requestUrl
,
Map
<?,
?>
parameters
,
Map
<
String
,
String
>
header
,
Proxy
proxy
)
throws
HttpRequestException
{
HttpURLConnection
connection
=
null
;
try
{
if
(
requestUrl
.
startsWith
(
"https"
))
{
}
String
requestBody
=
HttpUtil
.
toQueryString
(
parameters
,
charset
);
requestUrl
=
requestUrl
+
(
requestUrl
.
contains
(
"?"
)
?
(
requestUrl
.
endsWith
(
"&"
)
?
""
:
"&"
)
:
"?"
)
+
requestBody
;
System
.
out
.
println
(
requestUrl
);
connection
=
createConnection
(
requestUrl
,
proxy
);
connection
.
setRequestMethod
(
"GET"
);
connection
.
setRequestProperty
(
"Accept-Charset"
,
charset
);
connection
.
setRequestProperty
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
if
(
header
!=
null
)
{
for
(
String
key
:
header
.
keySet
())
{
connection
.
setRequestProperty
(
key
,
header
.
get
(
key
));
}
}
connection
.
connect
();
return
responseBody
(
connection
);
}
catch
(
Exception
e
)
{
throw
new
HttpRequestException
(
"HTTP(GET)请求异常"
,
e
);
}
finally
{
connection
.
disconnect
();
}
}
public
static
String
post
(
String
requestUrl
)
throws
HttpRequestException
{
return
HttpUtil
.
post
(
requestUrl
,
null
);
}
public
static
String
post
(
String
requestUrl
,
Map
<?,
?>
parameters
)
throws
HttpRequestException
{
return
HttpUtil
.
post
(
requestUrl
,
parameters
,
null
);
}
public
static
String
post
(
String
requestUrl
,
Map
<?,
?>
parameters
,
Map
<
String
,
String
>
headers
)
throws
HttpRequestException
{
return
HttpUtil
.
post
(
requestUrl
,
parameters
,
headers
,
null
);
}
public
static
String
post
(
String
requestUrl
,
Map
<?,
?>
parameters
,
Map
<
String
,
String
>
headers
,
Proxy
proxy
)
throws
HttpRequestException
{
return
post
(
requestUrl
,
HttpUtil
.
toQueryString
(
parameters
,
charset
),
headers
,
proxy
);
}
public
static
String
post
(
String
requestUrl
,
String
text
,
Map
<
String
,
String
>
headers
,
Proxy
proxy
)
throws
HttpRequestException
{
HttpURLConnection
connection
=
null
;
try
{
byte
[]
bytes
=
text
==
null
?
new
byte
[
0
]
:
text
.
getBytes
();
connection
=
createConnection
(
requestUrl
,
proxy
);
connection
.
setDoOutput
(
true
);
connection
.
setDoInput
(
true
);
connection
.
setRequestMethod
(
"POST"
);
connection
.
setUseCaches
(
false
);
connection
.
setInstanceFollowRedirects
(
true
);
connection
.
setRequestProperty
(
"Accept-Charset"
,
charset
);
connection
.
setRequestProperty
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
connection
.
setRequestProperty
(
"Content-Length"
,
String
.
valueOf
(
bytes
.
length
));
if
(
headers
!=
null
)
{
for
(
String
key
:
headers
.
keySet
())
{
connection
.
setRequestProperty
(
key
,
headers
.
get
(
key
));
}
}
OutputStream
out
=
connection
.
getOutputStream
();
out
.
write
(
bytes
);
out
.
close
();
return
responseBody
(
connection
);
}
catch
(
Exception
e
)
{
throw
new
HttpRequestException
(
"HTTP(POST)请求异常"
,
e
);
}
finally
{
connection
.
disconnect
();
}
}
private
static
final
Pattern
pattern
=
Pattern
.
compile
(
"charset(\\s+)?=(\\s+)?([0-9a-zA-Z\\-]+)"
);
public
static
String
responseBody
(
HttpURLConnection
connection
)
throws
HttpResponseException
{
try
{
byte
[]
bytes
;
try
{
bytes
=
FileUtil
.
streamToBytes
(
connection
.
getInputStream
());
}
catch
(
IOException
e
)
{
bytes
=
FileUtil
.
streamToBytes
(
connection
.
getErrorStream
());
}
Map
<
String
,
List
<
String
>>
responseHeaders
=
connection
.
getHeaderFields
();
List
<
String
>
contentTypes
=
responseHeaders
.
get
(
"Content-Type"
);
String
responseCharsetName
=
null
;
if
(
contentTypes
!=
null
)
{
for
(
String
contentType
:
contentTypes
)
{
Matcher
matcher
=
pattern
.
matcher
(
contentType
);
if
(
matcher
.
find
())
{
responseCharsetName
=
matcher
.
group
(
3
);
break
;
}
}
}
if
(
responseCharsetName
==
null
||
responseCharsetName
.
trim
().
length
()
==
0
)
{
return
new
String
(
bytes
,
charset
);
}
else
{
return
new
String
(
bytes
,
responseCharsetName
);
}
}
catch
(
Exception
e
)
{
throw
new
HttpResponseException
(
"获取HTTP请求响应结果异常"
,
e
);
}
}
public
static
Map
<
String
,
String
[]>
toParameters
(
String
queryString
)
{
Map
<
String
,
List
<
String
>>
map
=
new
HashMap
<
String
,
List
<
String
>>();
String
[]
ary
=
queryString
.
split
(
"&"
);
for
(
String
str
:
ary
)
{
if
(
StringUtil
.
isNotEmpty
(
str
))
{
String
[]
kv
=
str
.
split
(
"="
,
2
);
List
<
String
>
list
=
map
.
get
(
kv
[
0
]);
if
(
list
==
null
)
{
list
=
new
ArrayList
<
String
>();
}
list
.
add
(
StringUtil
.
isNotBlank
(
kv
[
1
])
?
kv
[
1
]
:
null
);
map
.
put
(
kv
[
0
],
list
);
}
}
Map
<
String
,
String
[]>
params
=
new
HashMap
<
String
,
String
[]>();
for
(
String
key
:
map
.
keySet
())
{
List
<
String
>
list
=
map
.
get
(
key
);
params
.
put
(
key
,
list
.
toArray
(
new
String
[
list
.
size
()]));
}
return
params
;
}
public
static
String
toQueryString
(
Map
<?,
?>
parameters
)
{
return
toQueryString
(
parameters
,
null
);
}
public
static
String
toQueryString
(
Map
<?,
?>
parameters
,
String
encode
)
throws
HttpUrlEncodingException
{
try
{
List
<
String
>
params
=
new
ArrayList
<
String
>();
if
(
parameters
!=
null
)
{
for
(
Object
key
:
parameters
.
keySet
())
{
Object
val
=
parameters
.
get
(
key
);
String
sKey
=
String
.
valueOf
(
key
);
Object
[]
sVals
=
(
val
==
null
?
null
:
(
val
instanceof
Object
[]
?
(
Object
[])
val
:
new
Object
[]
{
val
}));
if
(
sVals
!=
null
&&
sVals
.
length
>
0
)
{
for
(
Object
sVal
:
sVals
)
{
params
.
add
(
sKey
+
"="
+
(
sVal
==
null
?
""
:
URLEncoder
.
encode
(
String
.
valueOf
(
sVal
),
encode
==
null
?
charset
:
encode
)));
}
}
else
{
params
.
add
(
"sKey="
);
}
}
}
return
StringUtil
.
join
(
"&"
,
params
);
}
catch
(
UnsupportedEncodingException
e
)
{
throw
new
HttpUrlEncodingException
(
"URL编码异常"
,
e
);
}
}
public
static
String
formatToQueryString
(
Map
<?,
?>
parameters
)
{
List
<
String
>
params
=
new
ArrayList
<
String
>();
if
(
parameters
!=
null
)
{
for
(
Object
key
:
parameters
.
keySet
())
{
Object
val
=
parameters
.
get
(
key
);
String
sKey
=
String
.
valueOf
(
key
);
Object
[]
sVals
=
(
val
==
null
?
null
:
(
val
instanceof
Object
[]
?
(
Object
[])
val
:
new
Object
[]
{
val
}));
if
(
sVals
!=
null
&&
sVals
.
length
>
0
)
{
for
(
Object
sVal
:
sVals
)
{
params
.
add
(
sKey
+
"="
+
(
sVal
==
null
?
""
:
sVal
));
}
}
else
{
params
.
add
(
sKey
+
"="
);
}
}
}
return
StringUtil
.
join
(
"&"
,
params
);
}
public
static
String
post
(
String
requestUrl
,
Map
<
String
,
Object
>
parameters
,
Map
<
String
,
String
>
headers
,
Map
<
String
,
File
>
attachments
,
String
contentType
)
{
HttpURLConnection
connection
=
null
;
try
{
Data
data
=
new
Data
();
String
BOUNDARY
=
"----WebKitFormBoundaryT1HoybnYeFOGFlBR"
;
StringBuffer
ParamBuffer
=
new
StringBuffer
();
if
(
parameters
!=
null
)
{
for
(
String
key
:
parameters
.
keySet
())
{
ParamBuffer
.
append
(
"--"
+
BOUNDARY
+
"\r\n"
);
ParamBuffer
.
append
(
"Content-Disposition: form-data; name=\""
+
key
+
"\"\r\n"
);
ParamBuffer
.
append
(
"\r\n"
);
ParamBuffer
.
append
(
parameters
.
get
(
key
)
+
"\r\n"
);
}
}
String
ParamBufferString
=
ParamBuffer
.
toString
();
data
.
add
(
ParamBufferString
.
getBytes
());
if
(
attachments
!=
null
)
{
for
(
String
name
:
attachments
.
keySet
())
{
StringBuffer
FileBuffer
=
new
StringBuffer
();
File
file
=
attachments
.
get
(
name
);
FileBuffer
.
append
(
"--"
+
BOUNDARY
+
"\r\n"
);
FileBuffer
.
append
(
"Content-Disposition: form-data; name=\""
+
name
+
"\"; filename=\""
+
file
.
getName
()
+
"\""
+
"\r\n"
);
FileBuffer
.
append
(
"Content-Type:"
+
contentType
+
""
+
"\r\n"
);
FileBuffer
.
append
(
"\r\n"
);
String
FileBufferString
=
FileBuffer
.
toString
();
data
.
add
(
FileBufferString
.
getBytes
());
data
.
add
(
file
);
String
FileEnd
=
"\r\n"
;
data
.
add
(
FileEnd
.
getBytes
());
}
}
StringBuffer
EndBuffer
=
new
StringBuffer
(
"\r\n--"
+
BOUNDARY
+
"--\r\n"
);
String
EndBufferString
=
EndBuffer
.
toString
();
data
.
add
(
EndBufferString
.
getBytes
());
connection
=
createConnection
(
requestUrl
,
null
);
connection
.
setRequestMethod
(
"POST"
);
connection
.
setRequestProperty
(
"Accept-Charset"
,
"utf-8"
);
connection
.
setRequestProperty
(
"Content-Type"
,
"multipart/form-data; boundary="
+
BOUNDARY
);
connection
.
setRequestProperty
(
"Content-Length"
,
String
.
valueOf
(
data
.
length
()));
if
(
headers
!=
null
)
{
for
(
String
key
:
headers
.
keySet
())
{
connection
.
setRequestProperty
(
key
,
headers
.
get
(
key
));
}
}
connection
.
setDoOutput
(
true
);
OutputStream
out
=
connection
.
getOutputStream
();
out
.
write
(
data
.
bytes
());
out
.
close
();
return
responseBody
(
connection
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
finally
{
connection
.
disconnect
();
}
}
static
class
Data
{
private
byte
[][]
ds
=
new
byte
[
0
][
0
];
public
void
add
(
File
file
)
throws
IOException
{
FileInputStream
fis
=
new
FileInputStream
(
file
);
ByteArrayOutputStream
bos
=
new
ByteArrayOutputStream
(
1000
);
byte
[]
b
=
new
byte
[
1000
];
int
n
;
while
((
n
=
fis
.
read
(
b
))
!=
-
1
)
{
bos
.
write
(
b
,
0
,
n
);
}
fis
.
close
();
bos
.
close
();
add
(
bos
.
toByteArray
());
}
public
void
add
(
byte
[]
data
)
{
int
length
=
ds
.
length
;
byte
[][]
ds_tmp
=
new
byte
[
length
+
1
][];
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
ds_tmp
[
i
]
=
ds
[
i
];
}
ds_tmp
[
length
]
=
data
;
ds
=
ds_tmp
;
}
public
int
length
()
{
int
length
=
0
;
for
(
byte
[]
b
:
ds
)
{
length
+=
b
.
length
;
}
return
length
;
}
public
byte
[]
bytes
()
{
byte
[]
bytes
=
new
byte
[
length
()];
int
index
=
0
;
for
(
int
i
=
0
;
i
<
ds
.
length
;
i
++)
{
for
(
int
k
=
0
;
k
<
ds
[
i
].
length
;
k
++)
{
bytes
[
index
++]
=
ds
[
i
][
k
];
}
}
return
bytes
;
}
}
}
package
com
.
egolm
.
common
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.io.UnsupportedEncodingException
;
import
java.net.HttpURLConnection
;
import
java.net.Proxy
;
import
java.net.URL
;
import
java.net.URLEncoder
;
import
java.security.cert.CertificateException
;
import
java.security.cert.X509Certificate
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
javax.net.ssl.HttpsURLConnection
;
import
javax.net.ssl.SSLContext
;
import
javax.net.ssl.TrustManager
;
import
javax.net.ssl.X509TrustManager
;
import
com.egolm.common.exception.HttpRequestException
;
import
com.egolm.common.exception.HttpResponseException
;
import
com.egolm.common.exception.HttpUrlEncodingException
;
/**
*
* @author 曲欣亮
* @since 2015-04-01
*
*/
public
class
HttpUtil
{
static
{
System
.
setProperty
(
"sun.net.http.allowRestrictedHeaders"
,
"true"
);
}
private
static
final
String
charset
=
"utf-8"
;
private
static
SSLContext
sslContextDefault
=
null
;
private
static
class
TrustAnyTrustManager
implements
X509TrustManager
{
public
void
checkClientTrusted
(
X509Certificate
[]
chain
,
String
authType
)
throws
CertificateException
{
}
public
void
checkServerTrusted
(
X509Certificate
[]
chain
,
String
authType
)
throws
CertificateException
{
}
public
X509Certificate
[]
getAcceptedIssuers
()
{
return
new
X509Certificate
[]
{};
}
}
private
static
SSLContext
getDefaultSSLContext
()
{
if
(
sslContextDefault
==
null
)
{
try
{
sslContextDefault
=
SSLContext
.
getInstance
(
"SSL"
);
sslContextDefault
.
init
(
null
,
new
TrustManager
[]
{
new
TrustAnyTrustManager
()
},
new
java
.
security
.
SecureRandom
());
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
return
sslContextDefault
;
}
private
static
HttpURLConnection
createConnection
(
String
requestUrl
,
Proxy
proxy
)
throws
IOException
{
URL
HTTP_URL
=
new
URL
(
requestUrl
);
HttpURLConnection
connection
=
(
HttpURLConnection
)
(
proxy
==
null
?
HTTP_URL
.
openConnection
()
:
HTTP_URL
.
openConnection
(
proxy
));
if
(
requestUrl
.
startsWith
(
"https"
))
{
((
HttpsURLConnection
)
connection
).
setSSLSocketFactory
(
getDefaultSSLContext
().
getSocketFactory
());
}
return
connection
;
}
public
static
String
get
(
String
requestUrl
)
throws
HttpRequestException
{
return
HttpUtil
.
get
(
requestUrl
,
null
,
null
,
null
);
}
public
static
String
get
(
String
requestUrl
,
Map
<?,
?>
parameters
)
throws
HttpRequestException
{
return
HttpUtil
.
get
(
requestUrl
,
parameters
,
null
,
null
);
}
public
static
String
get
(
String
requestUrl
,
Map
<?,
?>
parameters
,
Map
<
String
,
String
>
header
)
throws
HttpRequestException
{
return
HttpUtil
.
get
(
requestUrl
,
parameters
,
header
,
null
);
}
public
static
String
get
(
String
requestUrl
,
Map
<?,
?>
parameters
,
Map
<
String
,
String
>
header
,
Proxy
proxy
)
throws
HttpRequestException
{
HttpURLConnection
connection
=
null
;
try
{
if
(
requestUrl
.
startsWith
(
"https"
))
{
}
String
requestBody
=
HttpUtil
.
toQueryString
(
parameters
,
charset
);
requestUrl
=
requestUrl
+
(
requestUrl
.
contains
(
"?"
)
?
(
requestUrl
.
endsWith
(
"&"
)
?
""
:
"&"
)
:
"?"
)
+
requestBody
;
System
.
out
.
println
(
requestUrl
);
connection
=
createConnection
(
requestUrl
,
proxy
);
connection
.
setRequestMethod
(
"GET"
);
connection
.
setRequestProperty
(
"Accept-Charset"
,
charset
);
connection
.
setRequestProperty
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
if
(
header
!=
null
)
{
for
(
String
key
:
header
.
keySet
())
{
connection
.
setRequestProperty
(
key
,
header
.
get
(
key
));
}
}
connection
.
connect
();
return
responseBody
(
connection
);
}
catch
(
Exception
e
)
{
throw
new
HttpRequestException
(
"HTTP(GET)请求异常"
,
e
);
}
finally
{
connection
.
disconnect
();
}
}
public
static
String
post
(
String
requestUrl
)
throws
HttpRequestException
{
return
HttpUtil
.
post
(
requestUrl
,
null
);
}
public
static
String
post
(
String
requestUrl
,
Map
<?,
?>
parameters
)
throws
HttpRequestException
{
return
HttpUtil
.
post
(
requestUrl
,
parameters
,
null
);
}
public
static
String
post
(
String
requestUrl
,
Map
<?,
?>
parameters
,
Map
<
String
,
String
>
headers
)
throws
HttpRequestException
{
return
HttpUtil
.
post
(
requestUrl
,
parameters
,
headers
,
null
);
}
public
static
String
post
(
String
requestUrl
,
Map
<?,
?>
parameters
,
Map
<
String
,
String
>
headers
,
Proxy
proxy
)
throws
HttpRequestException
{
return
post
(
requestUrl
,
HttpUtil
.
toQueryString
(
parameters
,
charset
),
headers
,
proxy
);
}
public
static
String
post
(
String
requestUrl
,
String
text
,
Map
<
String
,
String
>
headers
,
Proxy
proxy
)
throws
HttpRequestException
{
HttpURLConnection
connection
=
null
;
try
{
byte
[]
bytes
=
text
==
null
?
new
byte
[
0
]
:
text
.
getBytes
();
connection
=
createConnection
(
requestUrl
,
proxy
);
connection
.
setDoOutput
(
true
);
connection
.
setDoInput
(
true
);
connection
.
setRequestMethod
(
"POST"
);
connection
.
setUseCaches
(
false
);
connection
.
setInstanceFollowRedirects
(
true
);
connection
.
setRequestProperty
(
"Accept-Charset"
,
charset
);
connection
.
setRequestProperty
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
connection
.
setRequestProperty
(
"Content-Length"
,
String
.
valueOf
(
bytes
.
length
));
if
(
headers
!=
null
)
{
for
(
String
key
:
headers
.
keySet
())
{
connection
.
setRequestProperty
(
key
,
headers
.
get
(
key
));
}
}
OutputStream
out
=
connection
.
getOutputStream
();
out
.
write
(
bytes
);
out
.
close
();
return
responseBody
(
connection
);
}
catch
(
Exception
e
)
{
throw
new
HttpRequestException
(
"HTTP(POST)请求异常"
,
e
);
}
finally
{
connection
.
disconnect
();
}
}
private
static
final
Pattern
pattern
=
Pattern
.
compile
(
"charset(\\s+)?=(\\s+)?([0-9a-zA-Z\\-]+)"
);
public
static
String
responseBody
(
HttpURLConnection
connection
)
throws
HttpResponseException
{
try
{
byte
[]
bytes
;
try
{
bytes
=
FileUtil
.
streamToBytes
(
connection
.
getInputStream
());
}
catch
(
IOException
e
)
{
bytes
=
FileUtil
.
streamToBytes
(
connection
.
getErrorStream
());
}
Map
<
String
,
List
<
String
>>
responseHeaders
=
connection
.
getHeaderFields
();
List
<
String
>
contentTypes
=
responseHeaders
.
get
(
"Content-Type"
);
String
responseCharsetName
=
null
;
if
(
contentTypes
!=
null
)
{
for
(
String
contentType
:
contentTypes
)
{
Matcher
matcher
=
pattern
.
matcher
(
contentType
);
if
(
matcher
.
find
())
{
responseCharsetName
=
matcher
.
group
(
3
);
break
;
}
}
}
if
(
responseCharsetName
==
null
||
responseCharsetName
.
trim
().
length
()
==
0
)
{
return
new
String
(
bytes
,
charset
);
}
else
{
return
new
String
(
bytes
,
responseCharsetName
);
}
}
catch
(
Exception
e
)
{
throw
new
HttpResponseException
(
"获取HTTP请求响应结果异常"
,
e
);
}
}
public
static
Map
<
String
,
String
[]>
toParameters
(
String
queryString
)
{
Map
<
String
,
List
<
String
>>
map
=
new
HashMap
<
String
,
List
<
String
>>();
String
[]
ary
=
queryString
.
split
(
"&"
);
for
(
String
str
:
ary
)
{
if
(
StringUtil
.
isNotEmpty
(
str
))
{
String
[]
kv
=
str
.
split
(
"="
,
2
);
List
<
String
>
list
=
map
.
get
(
kv
[
0
]);
if
(
list
==
null
)
{
list
=
new
ArrayList
<
String
>();
}
list
.
add
(
StringUtil
.
isNotBlank
(
kv
[
1
])
?
kv
[
1
]
:
null
);
map
.
put
(
kv
[
0
],
list
);
}
}
Map
<
String
,
String
[]>
params
=
new
HashMap
<
String
,
String
[]>();
for
(
String
key
:
map
.
keySet
())
{
List
<
String
>
list
=
map
.
get
(
key
);
params
.
put
(
key
,
list
.
toArray
(
new
String
[
list
.
size
()]));
}
return
params
;
}
public
static
String
toQueryString
(
Map
<?,
?>
parameters
)
{
return
toQueryString
(
parameters
,
null
);
}
public
static
String
toQueryString
(
Map
<?,
?>
parameters
,
String
encode
)
throws
HttpUrlEncodingException
{
try
{
List
<
String
>
params
=
new
ArrayList
<
String
>();
if
(
parameters
!=
null
)
{
for
(
Object
key
:
parameters
.
keySet
())
{
Object
val
=
parameters
.
get
(
key
);
String
sKey
=
String
.
valueOf
(
key
);
Object
[]
sVals
=
(
val
==
null
?
null
:
(
val
instanceof
Object
[]
?
(
Object
[])
val
:
new
Object
[]
{
val
}));
if
(
sVals
!=
null
&&
sVals
.
length
>
0
)
{
for
(
Object
sVal
:
sVals
)
{
params
.
add
(
sKey
+
"="
+
(
sVal
==
null
?
""
:
URLEncoder
.
encode
(
String
.
valueOf
(
sVal
),
encode
==
null
?
charset
:
encode
)));
}
}
else
{
params
.
add
(
"sKey="
);
}
}
}
return
StringUtil
.
join
(
"&"
,
params
);
}
catch
(
UnsupportedEncodingException
e
)
{
throw
new
HttpUrlEncodingException
(
"URL编码异常"
,
e
);
}
}
public
static
String
formatToQueryString
(
Map
<?,
?>
parameters
)
{
List
<
String
>
params
=
new
ArrayList
<
String
>();
if
(
parameters
!=
null
)
{
for
(
Object
key
:
parameters
.
keySet
())
{
Object
val
=
parameters
.
get
(
key
);
String
sKey
=
String
.
valueOf
(
key
);
Object
[]
sVals
=
(
val
==
null
?
null
:
(
val
instanceof
Object
[]
?
(
Object
[])
val
:
new
Object
[]
{
val
}));
if
(
sVals
!=
null
&&
sVals
.
length
>
0
)
{
for
(
Object
sVal
:
sVals
)
{
if
(
StringUtil
.
isNotEmpty
(
sVal
))
{
params
.
add
(
sKey
+
"="
+
sVal
);
}
}
}
/*else {
params.add(sKey + "="); 空值不参与签名
}*/
}
}
return
StringUtil
.
join
(
"&"
,
params
);
}
public
static
String
post
(
String
requestUrl
,
Map
<
String
,
Object
>
parameters
,
Map
<
String
,
String
>
headers
,
Map
<
String
,
File
>
attachments
,
String
contentType
)
{
HttpURLConnection
connection
=
null
;
try
{
Data
data
=
new
Data
();
String
BOUNDARY
=
"----WebKitFormBoundaryT1HoybnYeFOGFlBR"
;
StringBuffer
ParamBuffer
=
new
StringBuffer
();
if
(
parameters
!=
null
)
{
for
(
String
key
:
parameters
.
keySet
())
{
ParamBuffer
.
append
(
"--"
+
BOUNDARY
+
"\r\n"
);
ParamBuffer
.
append
(
"Content-Disposition: form-data; name=\""
+
key
+
"\"\r\n"
);
ParamBuffer
.
append
(
"\r\n"
);
ParamBuffer
.
append
(
parameters
.
get
(
key
)
+
"\r\n"
);
}
}
String
ParamBufferString
=
ParamBuffer
.
toString
();
data
.
add
(
ParamBufferString
.
getBytes
());
if
(
attachments
!=
null
)
{
for
(
String
name
:
attachments
.
keySet
())
{
StringBuffer
FileBuffer
=
new
StringBuffer
();
File
file
=
attachments
.
get
(
name
);
FileBuffer
.
append
(
"--"
+
BOUNDARY
+
"\r\n"
);
FileBuffer
.
append
(
"Content-Disposition: form-data; name=\""
+
name
+
"\"; filename=\""
+
file
.
getName
()
+
"\""
+
"\r\n"
);
FileBuffer
.
append
(
"Content-Type:"
+
contentType
+
""
+
"\r\n"
);
FileBuffer
.
append
(
"\r\n"
);
String
FileBufferString
=
FileBuffer
.
toString
();
data
.
add
(
FileBufferString
.
getBytes
());
data
.
add
(
file
);
String
FileEnd
=
"\r\n"
;
data
.
add
(
FileEnd
.
getBytes
());
}
}
StringBuffer
EndBuffer
=
new
StringBuffer
(
"\r\n--"
+
BOUNDARY
+
"--\r\n"
);
String
EndBufferString
=
EndBuffer
.
toString
();
data
.
add
(
EndBufferString
.
getBytes
());
connection
=
createConnection
(
requestUrl
,
null
);
connection
.
setRequestMethod
(
"POST"
);
connection
.
setRequestProperty
(
"Accept-Charset"
,
"utf-8"
);
connection
.
setRequestProperty
(
"Content-Type"
,
"multipart/form-data; boundary="
+
BOUNDARY
);
connection
.
setRequestProperty
(
"Content-Length"
,
String
.
valueOf
(
data
.
length
()));
if
(
headers
!=
null
)
{
for
(
String
key
:
headers
.
keySet
())
{
connection
.
setRequestProperty
(
key
,
headers
.
get
(
key
));
}
}
connection
.
setDoOutput
(
true
);
OutputStream
out
=
connection
.
getOutputStream
();
out
.
write
(
data
.
bytes
());
out
.
close
();
return
responseBody
(
connection
);
}
catch
(
Exception
e
)
{
throw
new
RuntimeException
(
e
);
}
finally
{
connection
.
disconnect
();
}
}
static
class
Data
{
private
byte
[][]
ds
=
new
byte
[
0
][
0
];
public
void
add
(
File
file
)
throws
IOException
{
FileInputStream
fis
=
new
FileInputStream
(
file
);
ByteArrayOutputStream
bos
=
new
ByteArrayOutputStream
(
1000
);
byte
[]
b
=
new
byte
[
1000
];
int
n
;
while
((
n
=
fis
.
read
(
b
))
!=
-
1
)
{
bos
.
write
(
b
,
0
,
n
);
}
fis
.
close
();
bos
.
close
();
add
(
bos
.
toByteArray
());
}
public
void
add
(
byte
[]
data
)
{
int
length
=
ds
.
length
;
byte
[][]
ds_tmp
=
new
byte
[
length
+
1
][];
for
(
int
i
=
0
;
i
<
length
;
i
++)
{
ds_tmp
[
i
]
=
ds
[
i
];
}
ds_tmp
[
length
]
=
data
;
ds
=
ds_tmp
;
}
public
int
length
()
{
int
length
=
0
;
for
(
byte
[]
b
:
ds
)
{
length
+=
b
.
length
;
}
return
length
;
}
public
byte
[]
bytes
()
{
byte
[]
bytes
=
new
byte
[
length
()];
int
index
=
0
;
for
(
int
i
=
0
;
i
<
ds
.
length
;
i
++)
{
for
(
int
k
=
0
;
k
<
ds
[
i
].
length
;
k
++)
{
bytes
[
index
++]
=
ds
[
i
][
k
];
}
}
return
bytes
;
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment