diff --git a/headers.go b/headers.go index 1a9c03a..611c96a 100644 --- a/headers.go +++ b/headers.go @@ -25,7 +25,6 @@ var ( hdrContentEncodingKey = http.CanonicalHeaderKey("Content-Encoding") hdrLocationKey = http.CanonicalHeaderKey("Location") - plainTextType = "text/plain; charset=utf-8" jsonContentType = "application/json" formUrlencodedType = "application/x-www-form-urlencoded" formDataType = "multipart/form-data" @@ -33,6 +32,8 @@ var ( textPlainType = "text/plain" javaScriptType = "javascript" + charsetUtf8 = "charset=utf-8" + jsonCheck = regexp.MustCompile(`(?i:(application|text)/(json|.*\+json|json\-.*)(;|$))`) xmlCheck = regexp.MustCompile(`(?i:(application|text)/(xml|.*\+xml)(;|$))`) bufPool = &sync.Pool{New: func() interface{} { return &bytes.Buffer{} }} @@ -109,6 +110,11 @@ func (s *HeadersConf) ConentType_json() *HeadersConf { return s } +func (s *HeadersConf) ConentType_charsetUtf8() *HeadersConf { + s.simpleReq.headers.Add(hdrContentTypeKey, charsetUtf8) + return s +} + func (s *HeadersConf) ConentType_formData() *HeadersConf { //tmp := url.Values{} @@ -123,7 +129,7 @@ func (s *HeadersConf) ConentType_formUrlencoded() *HeadersConf { return s } func (s *HeadersConf) ConentType_textPlain() *HeadersConf { - s.simpleReq.headers.Set(hdrContentTypeKey, plainTextType) + s.simpleReq.headers.Set(hdrContentTypeKey, textPlainType) return s } diff --git a/simpleRequest.go b/simpleRequest.go index 06f00f5..46d6a26 100644 --- a/simpleRequest.go +++ b/simpleRequest.go @@ -218,7 +218,7 @@ func (s *SimpleRequest) Get(urls string) (body []byte, err error) { func (s *SimpleRequest) initBody() { contentTypeData := s.headers.Get(hdrContentTypeKey) switch { - case contentTypeData == jsonContentType: + case IsJSONType(contentTypeData): jsonData, err := json.Marshal(s.tempBody) if err == nil { s.body = bytes.NewReader(jsonData) @@ -234,12 +234,10 @@ func (s *SimpleRequest) initBody() { case string: strSv, _ := sv.(string) _ = writer.WriteField(k, strSv) - //data.Set(k, strSv) case []string: sss, _ := sv.([]string) for _, v := range sss { _ = writer.WriteField(k, v) - //data.Add(k, v) } } } @@ -248,21 +246,24 @@ func (s *SimpleRequest) initBody() { panic(err) } s.headers.Set("Content-Type", writer.FormDataContentType()) - //strD := data.Encode() - //bodyText := strings.NewReader(strD) s.body = body - - case contentTypeData == xmlDataType || contentTypeData == textPlainType || contentTypeData == javaScriptType: + case IsXMLType(contentTypeData): + //application/soap+xml ,application/xml data, _ := s.tempBody[stringBodyType].(string) s.body = strings.NewReader(data) - case contentTypeData == "": + case strings.Contains(contentTypeData, "text") || strings.Contains(contentTypeData, javaScriptType): + data, _ := s.tempBody[stringBodyType].(string) + s.body = strings.NewReader(data) + case contentTypeData == "" || strings.Contains(contentTypeData, "form"): + //默认为x-www-form-urlencoded格式 + //x-www-form-urlencoded ,multipart/form-data ..等form格式走此方法 tmpData := url.Values{} for k, v := range tmpData { tmpData.Set(k, fmt.Sprintf("%v", v)) } s.body = strings.NewReader(tmpData.Encode()) s.Headers().ConentType_formUrlencoded() - default: //x-www-form-urlencoded ,multipart/form-data .. + default: tmpData := url.Values{} for k, v := range tmpData { tmpData.Set(k, fmt.Sprintf("%v", v)) diff --git a/test/simpleCrypto/ecb.go b/test/simpleCrypto/ecb.go new file mode 100644 index 0000000..d5c2f63 --- /dev/null +++ b/test/simpleCrypto/ecb.go @@ -0,0 +1,76 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Electronic Code Book (ECB) mode. + +// ECB provides confidentiality by assigning a fixed ciphertext block to each +// plaintext block. + +// See NIST SP 800-38A, pp 08-09 + +package simpleCrypto + +import ( + "crypto/cipher" +) + +type ecb struct { + b cipher.Block + blockSize int +} + +func newECB(b cipher.Block) *ecb { + return &ecb{ + b: b, + blockSize: b.BlockSize(), + } +} + +type ecbEncrypter ecb + +// NewECBEncrypter returns a BlockMode which encrypts in electronic code book +// mode, using the given Block. +func NewECBEncrypter(b cipher.Block) cipher.BlockMode { + return (*ecbEncrypter)(newECB(b)) +} + +func (x *ecbEncrypter) BlockSize() int { return x.blockSize } + +func (x *ecbEncrypter) CryptBlocks(dst, src []byte) { + if len(src)%x.blockSize != 0 { + panic("crypto/cipher: input not full blocks") + } + if len(dst) < len(src) { + panic("crypto/cipher: output smaller than input") + } + for len(src) > 0 { + x.b.Encrypt(dst, src[:x.blockSize]) + src = src[x.blockSize:] + dst = dst[x.blockSize:] + } +} + +type ecbDecrypter ecb + +// NewECBDecrypter returns a BlockMode which decrypts in electronic code book +// mode, using the given Block. +func NewECBDecrypter(b cipher.Block) cipher.BlockMode { + return (*ecbDecrypter)(newECB(b)) +} + +func (x *ecbDecrypter) BlockSize() int { return x.blockSize } + +func (x *ecbDecrypter) CryptBlocks(dst, src []byte) { + if len(src)%x.blockSize != 0 { + panic("crypto/cipher: input not full blocks") + } + if len(dst) < len(src) { + panic("crypto/cipher: output smaller than input") + } + for len(src) > 0 { + x.b.Decrypt(dst, src[:x.blockSize]) + src = src[x.blockSize:] + dst = dst[x.blockSize:] + } +} diff --git a/test/simpleCrypto/ecb_test.go b/test/simpleCrypto/ecb_test.go new file mode 100644 index 0000000..7318a2a --- /dev/null +++ b/test/simpleCrypto/ecb_test.go @@ -0,0 +1,125 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// ECB AES test vectors. + +// See U.S. National Institute of Standards and Technology (NIST) +// Special Publication 800-38A, ``Recommendation for Block Cipher +// Modes of Operation,'' 2001 Edition, pp. 24-29. + +package simpleCrypto + +import ( + "bytes" + "crypto/aes" + "encoding/base64" + "fmt" + "testing" +) + +var commonKey128 = []byte{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c} + +var commonKey192 = []byte{ + 0x8e, 0x73, 0xb0, 0xf7, 0xda, 0x0e, 0x64, 0x52, 0xc8, 0x10, 0xf3, 0x2b, 0x80, 0x90, 0x79, 0xe5, + 0x62, 0xf8, 0xea, 0xd2, 0x52, 0x2c, 0x6b, 0x7b, +} + +var commonKey256 = []byte{ + 0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81, + 0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4, +} +var commonInput = []byte{ + 0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96, 0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a, + 0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c, 0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51, + 0x30, 0xc8, 0x1c, 0x46, 0xa3, 0x5c, 0xe4, 0x11, 0xe5, 0xfb, 0xc1, 0x19, 0x1a, 0x0a, 0x52, 0xef, + 0xf6, 0x9f, 0x24, 0x45, 0xdf, 0x4f, 0x9b, 0x17, 0xad, 0x2b, 0x41, 0x7b, 0xe6, 0x6c, 0x37, 0x10, +} + +var ecbAESTests = []struct { + name string + key []byte + in []byte + out []byte +}{ + // NIST SP 800-38A pp 24-27 + { + "ECB-AES128", + commonKey128, + commonInput, + []byte{ + 0x3a, 0xd7, 0x7b, 0xb4, 0x0d, 0x7a, 0x36, 0x60, 0xa8, 0x9e, 0xca, 0xf3, 0x24, 0x66, 0xef, 0x97, + 0xf5, 0xd3, 0xd5, 0x85, 0x03, 0xb9, 0x69, 0x9d, 0xe7, 0x85, 0x89, 0x5a, 0x96, 0xfd, 0xba, 0xaf, + 0x43, 0xb1, 0xcd, 0x7f, 0x59, 0x8e, 0xce, 0x23, 0x88, 0x1b, 0x00, 0xe3, 0xed, 0x03, 0x06, 0x88, + 0x7b, 0x0c, 0x78, 0x5e, 0x27, 0xe8, 0xad, 0x3f, 0x82, 0x23, 0x20, 0x71, 0x04, 0x72, 0x5d, 0xd4, + }, + }, + { + "ECB-AES192", + commonKey192, + commonInput, + []byte{ + 0xbd, 0x33, 0x4f, 0x1d, 0x6e, 0x45, 0xf2, 0x5f, 0xf7, 0x12, 0xa2, 0x14, 0x57, 0x1f, 0xa5, 0xcc, + 0x97, 0x41, 0x04, 0x84, 0x6d, 0x0a, 0xd3, 0xad, 0x77, 0x34, 0xec, 0xb3, 0xec, 0xee, 0x4e, 0xef, + 0xef, 0x7a, 0xfd, 0x22, 0x70, 0xe2, 0xe6, 0x0a, 0xdc, 0xe0, 0xba, 0x2f, 0xac, 0xe6, 0x44, 0x4e, + 0x9a, 0x4b, 0x41, 0xba, 0x73, 0x8d, 0x6c, 0x72, 0xfb, 0x16, 0x69, 0x16, 0x03, 0xc1, 0x8e, 0x0e, + }, + }, + { + "ECB-AES256", + commonKey256, + commonInput, + []byte{ + 0xf3, 0xee, 0xd1, 0xbd, 0xb5, 0xd2, 0xa0, 0x3c, 0x06, 0x4b, 0x5a, 0x7e, 0x3d, 0xb1, 0x81, 0xf8, + 0x59, 0x1c, 0xcb, 0x10, 0xd4, 0x10, 0xed, 0x26, 0xdc, 0x5b, 0xa7, 0x4a, 0x31, 0x36, 0x28, 0x70, + 0xb6, 0xed, 0x21, 0xb9, 0x9c, 0xa6, 0xf4, 0xf9, 0xf1, 0x53, 0xe7, 0xb1, 0xbe, 0xaf, 0xed, 0x1d, + 0x23, 0x30, 0x4b, 0x7a, 0x39, 0xf9, 0xf3, 0xff, 0x06, 0x7d, 0x8d, 0x8f, 0x9e, 0x24, 0xec, 0xc7, + }, + }, +} + +func TestECB_AES(t *testing.T) { + for _, tt := range ecbAESTests { + test := tt.name + + c, err := aes.NewCipher(tt.key) + if err != nil { + t.Errorf("%s: NewCipher(%d bytes) = %s", test, len(tt.key), err) + continue + } + + encrypter := NewECBEncrypter(c) + d := make([]byte, len(tt.in)) + encrypter.CryptBlocks(d, tt.in) + if !bytes.Equal(tt.out, d) { + t.Errorf("%s: ECBEncrypter\nhave %x\nwant %x", test, d, tt.out) + } + + decrypter := NewECBDecrypter(c) + p := make([]byte, len(d)) + decrypter.CryptBlocks(p, d) + if !bytes.Equal(tt.in, p) { + t.Errorf("%s: ECBDecrypter\nhave %x\nwant %x", test, d, tt.in) + } + } +} + +//func PKCS5Padding(ciphertext []byte, blockSize int) []byte { +// padding := blockSize - len(ciphertext)%blockSize +// fmt.Println(padding) +// fmt.Println(len(ciphertext)) +// padtext := bytes.Repeat([]byte{byte(padding)}, padding) +// return append(ciphertext, padtext...) +//} + +func TestSelfECB(t *testing.T) { + combstr := []byte("dbc679fc7f4185e8:0092f9d7-01d6-44f1-b738-f557813d58e9:1575534561309") + fmt.Println(len(combstr)) + aeskey := []byte("yMY5J6iYnwPvxWGD") + c, _ := aes.NewCipher(aeskey) + encrypter := NewECBEncrypter(c) + combstr = PKCS5Padding(combstr, c.BlockSize()) + d := make([]byte, len(combstr)) + encrypter.CryptBlocks(d, combstr) + fmt.Println(base64.StdEncoding.EncodeToString(d)) +} diff --git a/test/simpleCrypto/readme.md b/test/simpleCrypto/readme.md new file mode 100644 index 0000000..058bc80 --- /dev/null +++ b/test/simpleCrypto/readme.md @@ -0,0 +1,4 @@ +# simpleCrypto +## 说明 +目前封装了md5、ecb加密的方法。 +具体内容请查看simpleCrypto.go文件。 \ No newline at end of file diff --git a/test/simpleCrypto/simpleCrypto.go b/test/simpleCrypto/simpleCrypto.go new file mode 100644 index 0000000..799df06 --- /dev/null +++ b/test/simpleCrypto/simpleCrypto.go @@ -0,0 +1,45 @@ +/* + * @FileName: + * @Author: xjj + * @CreateTime: 下午6:23 + * @Description: + */ +package simpleCrypto + +import ( + "bytes" + "crypto/aes" + "crypto/md5" + "encoding/base64" + "encoding/hex" + "sync" +) + +var lock sync.Mutex + +//Md5Enscrypto md5加密 +func Md5Enscrypto(data string) string { + m := md5.New() + m.Write([]byte(data)) + res := hex.EncodeToString(m.Sum(nil)) + return res +} + +//SimpleEncryptAesECB ECB加密,并对加密结果进行了base64编码 +func SimpleEncryptAesECB(aesText []byte, aesKey []byte) string { + lock.Lock() + c, _ := aes.NewCipher(aesKey) + encrypter := NewECBEncrypter(c) + aesText = PKCS5Padding(aesText, c.BlockSize()) + d := make([]byte, len(aesText)) + encrypter.CryptBlocks(d, aesText) + lock.Unlock() + return base64.StdEncoding.EncodeToString(d) +} + +//PKCS5Padding PKCS5明文填充方案,此方案使明文保持为块长度的倍数 +func PKCS5Padding(ciphertext []byte, blockSize int) []byte { + padding := blockSize - len(ciphertext)%blockSize + padtext := bytes.Repeat([]byte{byte(padding)}, padding) + return append(ciphertext, padtext...) +} diff --git a/test/simpleRequest_test.go b/test/simpleRequest_test.go index 8e131a7..41e1de9 100644 --- a/test/simpleRequest_test.go +++ b/test/simpleRequest_test.go @@ -10,7 +10,10 @@ package test import ( "fmt" "github.com/dorlolo/simpleRequest" - + "github.com/dorlolo/simpleRequest/test/simpleCrypto" + "github.com/dorlolo/simpleRequest/test/timeUtil" + "net/http" + "strings" "testing" "time" ) @@ -78,3 +81,57 @@ func TestAuthorization(t *testing.T) { t.Log(err) } + +func TestXml(t *testing.T) { + idcard := "320324196705101880" + thisDate := time.Now().Format(timeUtil.TimeFormat.NoSpacer_YMD) + passStr := fmt.Sprintf("%v%vsparkcn", idcard, thisDate) + pass := simpleCrypto.Md5Enscrypto(passStr) + urlAddr := "http://218.4.84.171:5445/AppWebService/GHBackBone_SAMWS.asmx?Content-Type=application/soap+xml;charset=utf-8" + body := fmt.Sprintf(` + + + + %v + %v + + +`, idcard, pass) + req := simpleRequest.NewRequest() + req.Headers().Set("Content-Type", "application/soap+xml;charset=utf-8") + req.Headers().SetRandomUerAgent() + req.Body().SetString(body) + data, err := req.Post(urlAddr) + t.Log(string(data)) + t.Log(err) + return +} + +func TestIsJsonType(t *testing.T) { + var headers = http.Header{} + headers.Set("Content-Type", "application/json") + headers.Add("Content-Type", "charset=UTF-8") + RES := simpleRequest.IsJSONType(headers.Get("Content-Type")) + t.Log(RES) + +} +func TestIsXmlType(t *testing.T) { + var headers = http.Header{} + headers.Add("Content-Type", "application/soap+xml;charset=utf-8") + RES := simpleRequest.IsXMLType(headers.Get("Content-Type")) + t.Log(RES) +} + +func TestTextPlain(t *testing.T) { + + var headers = http.Header{} + headers.Add("Content-Type", "text/plain;charset=utf-8") + + res := strings.Contains(headers.Get("Content-Type"), "text") + if res { + t.Log(res) + } else { + t.Log(false) + } + +} diff --git a/test/timeUtil/format.go b/test/timeUtil/format.go new file mode 100644 index 0000000..5afc645 --- /dev/null +++ b/test/timeUtil/format.go @@ -0,0 +1,55 @@ +/* + * @FileName: format.go + * @Author: JuneXu + * @CreateTime: 2022/2/25 下午2:30 + * @Description: + */ + +package timeUtil + +import "time" + +var MonthMap = make(map[string]string) + +type DefineTimeFormat struct { + //常规时间格式(日期带横杠) + Normal_YMDhms string + Normal_YMD string + Normal_hms string + //带斜杠的时间格式 + Slash_YMDhms string + Slash_YMD string + //无间隔符 + NoSpacer_YMDhms string + NoSpacer_YMD string +} + +var TimeFormat DefineTimeFormat +var Loc *time.Location + +func init() { + MonthMap[""] = "00" + MonthMap["January"] = "01" + MonthMap["February"] = "02" + MonthMap["March"] = "03" + MonthMap["April"] = "04" + MonthMap["May"] = "05" + MonthMap["June"] = "06" + MonthMap["July"] = "07" + MonthMap["August"] = "08" + MonthMap["September"] = "09" + MonthMap["October"] = "10" + MonthMap["November"] = "11" + MonthMap["December"] = "12" + + TimeFormat = DefineTimeFormat{ + Normal_YMDhms: "2006-01-02 15:04:05", + Normal_YMD: "2006-01-02", + Normal_hms: "15:04:05", + Slash_YMDhms: "2006/01/02 15:04:05", + Slash_YMD: "2006/01/02", + NoSpacer_YMDhms: "20060102150405", + NoSpacer_YMD: "20060102", + } + Loc, _ = time.LoadLocation("Asia/Shanghai") +} diff --git a/test/timeUtil/getTime.go b/test/timeUtil/getTime.go new file mode 100644 index 0000000..387fa37 --- /dev/null +++ b/test/timeUtil/getTime.go @@ -0,0 +1,65 @@ +/* + * @FileName: getTime.go + * @Author: JuneXu + * @CreateTime: 2022/3/1 下午6:35 + * @Description: + */ + +package timeUtil + +import ( + "fmt" + "time" +) + +//ThisMormingTime 今天凌晨 +func ThisMorming(format string) (strTime string) { + thisTime := time.Now() + year := thisTime.Year() + month := MonthMap[thisTime.Month().String()] + day := fmt.Sprintf("%02d", thisTime.Day()) + strTime = fmt.Sprintf("%v-%v-%v 00:00:00", year, month, day) + if format != TimeFormat.Normal_YMDhms { + t1, _ := time.ParseInLocation(TimeFormat.Normal_YMDhms, strTime, Loc) + strTime = t1.Format(format) + } + return strTime +} + +//ThisMorningUnix 获取当日凌晨的时间戳 +func ThisMorningToUnix() int64 { + thist := time.Now() + zero_tm := time.Date(thist.Year(), thist.Month(), thist.Day(), 0, 0, 0, 0, thist.Location()).Unix() + return zero_tm +} + +//ThisTimeUnix 获取当前时间的时间戳 +func CurrentimeToUnix() int64 { + return time.Now().Unix() +} + +//CurrenStrtime 获取当前时间字符串 +func CurrenStrtime(format string) (strTime string) { + strTime = time.Now().Format(format) + return +} + +//Currentime 获取当前时间 +func Currentime() (thisTime time.Time) { + thisTime = time.Now().In(Loc) + return +} + +//Currentime 获取当前时间 +func Currentime2(format string) (strTime string) { + strTime = time.Now().Format(format) + return +} + +//HoursAgo 若干小时之前的时间 +func HoursAgo(hours time.Duration, format string) (lastTimeStr string) { + lastStamp := time.Now().Unix() - int64((time.Hour * hours).Seconds()) + lastTime := time.Unix(lastStamp, 0).In(Loc) + lastTimeStr = lastTime.Format(format) + return +} diff --git a/test/timeUtil/getTime_test.go b/test/timeUtil/getTime_test.go new file mode 100644 index 0000000..7f834f4 --- /dev/null +++ b/test/timeUtil/getTime_test.go @@ -0,0 +1,20 @@ +/* + * @FileName: getTime_test.go + * @Author: JuneXu + * @CreateTime: 2022/3/21 下午5:58 + * @Description: + */ + +package timeUtil + +import ( + "testing" +) + +func TestTimett(t *testing.T) { + t.Log(ThisMorming(TimeFormat.Normal_YMDhms)) + t.Log(Currentime()) + t.Log(Currentime2(TimeFormat.Normal_YMDhms)) + t.Log(HoursAgo(5, TimeFormat.Normal_YMDhms)) + t.Log(HoursAgo(5, TimeFormat.Normal_YMDhms)) +} diff --git a/test/timeUtil/timeTranslate.go b/test/timeUtil/timeTranslate.go new file mode 100644 index 0000000..d86a836 --- /dev/null +++ b/test/timeUtil/timeTranslate.go @@ -0,0 +1,65 @@ +/** + * @Author Puzzle + * @Date 2021/11/18 1:36 下午 + **/ + +package timeUtil + +import ( + "fmt" + "time" +) + +func GetTimestampMillisecond() int64 { + now := time.Now() + return now.UnixNano() / 1e6 +} + +func StringToTime(strTime string) (*time.Time, error) { + const TIME_LAYOUT = "2006-01-02 15:04:05" //此时间不可更改 + timeobj, err := time.ParseInLocation(TIME_LAYOUT, strTime, Loc) + return &timeobj, err +} + +func StringToTimeWithFormat(strTime string, timeFormat string) (*time.Time, error) { + timeobj, err := time.ParseInLocation(timeFormat, strTime, Loc) + return &timeobj, err +} + +//去除精确时间后面的小数点 +func NowTimeToTime(layout string) *time.Time { + otime := time.Now().Format(layout) //"2006-01-02 15:04:05" and so on + tt, _ := StringToTime(otime) + return tt +} + +// timeToString +func TimeToString(timer time.Time) string { + //t1 := time.Now() + t2 := timer.Format("2006-01-02 15:04:05") + fmt.Println(t2) + return t2 +} + +// todo +//func commonParse_stringToTime(timeStr string) *time.Time { +//const spaceList =[4,2,2,2,2,2] +//var timeMap struct { +// year string +// month string +// day string +// hour string +// minute string +// second string +//} +// +//for k, v := range timeStr { +// fmt.Println() +//} + +//测试能否被int64化,如果能够转化说明全是数字 +// 替换-为"" +// 替换/为"" +// 替换:为"" + +//} diff --git a/test/timeUtil/timeTranslate_test.go b/test/timeUtil/timeTranslate_test.go new file mode 100644 index 0000000..44e467b --- /dev/null +++ b/test/timeUtil/timeTranslate_test.go @@ -0,0 +1,22 @@ +/* + * @FileName: time_test.go + * @Author: JuneXu + * @CreateTime: 2022/2/25 下午2:37 + * @Description: + */ + +package timeUtil + +import ( + "fmt" + "testing" + "time" +) + +func TestTime(t *testing.T) { + result := NowTimeToTime(TimeFormat.Normal_YMDhms) + fmt.Println(result) + + TimeToString(time.Now()) + t.Log(NowTimeToTime(TimeFormat.Normal_YMD)) +} diff --git a/utils.go b/utils.go new file mode 100644 index 0000000..1cc8c78 --- /dev/null +++ b/utils.go @@ -0,0 +1,17 @@ +/* + * @FileName: utils.go + * @Author: JuneXu + * @CreateTime: 2022/3/29 上午11:16 + * @Description: + */ + +package simpleRequest + +func IsJSONType(ct string) bool { + return jsonCheck.MatchString(ct) +} + +// IsXMLType method is to check XML content type or not +func IsXMLType(ct string) bool { + return xmlCheck.MatchString(ct) +}