+++ /dev/null
-package part
-
-import (
- // "sync"
- // "os"
- "github.com/klauspost/compress/flate"
- // "io"
- // "path/filepath"
- // "strings"
- "bytes"
- // "time"
- // "errors"
-)
-
-type lflate struct {}
-
-func Flate() *lflate{
- return &lflate{}
-}
-
-func (this *lflate) InFlate(byteS []byte, level int) ([]byte,error) {
- buf := bytes.NewBuffer(nil)
-
- // 创建一个flate.Write
- flateWrite, err := flate.NewWriter(buf, level)
- if err != nil {
- Logf().E(err.Error())
- return buf.Bytes(),err
- }
- defer flateWrite.Close()
- // 写入待压缩内容
- flateWrite.Write(byteS)
- flateWrite.Flush()
- return buf.Bytes(),nil
-}
-
-// func (this *lflate) UnFlate(zipFile string, destDir string) error {
-// this.Lock()
-// defer this.Unlock()
-
-// r, err := zip.OpenReader(zipFile)
-// if err != nil {
-// return err
-// }
-// defer func() {
-// if err := r.Close(); err != nil {
-// panic(err)
-// }
-// }()
-
-// os.MkdirAll(destDir, 0755)
-
-// // Closure to address file descriptors issue with all the deferred .Close() methods
-// extractAndWriteFile := func(f *zip.File) error {
-// rc, err := f.Open()
-// if err != nil {
-// return err
-// }
-// defer func() {
-// if err := rc.Close(); err != nil {
-// panic(err)
-// }
-// }()
-
-// path := filepath.Join(destDir, f.Name)
-
-// if f.FileInfo().IsDir() {
-// os.MkdirAll(path, f.Mode())
-// } else {
-// os.MkdirAll(filepath.Dir(path), f.Mode())
-// f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
-// if err != nil {
-// return err
-// }
-// defer func() {
-// if err := f.Close(); err != nil {
-// panic(err)
-// }
-// }()
-
-// _, err = io.Copy(f, rc)
-// if err != nil {
-// return err
-// }
-// }
-// return nil
-// }
-
-// for _, f := range r.File {
-// err := extractAndWriteFile(f)
-// if err != nil {
-// return err
-// }
-// }
-
-// return nil
-// }
-
-// type rZip struct {
-// poit *zip.ReadCloser
-// buf map[string]*zip.File
-// sync.Mutex
-// }
-
-// func RZip() *rZip {return &rZip{}}
-
-// func (t *rZip) New(zipFile string) (error) {
-// t.Lock()
-// defer t.Unlock()
-
-// t.buf = make(map[string]*zip.File)
-
-// var err error
-// t.poit, err = zip.OpenReader(zipFile)
-// if err != nil {return err}
-
-// for _, _f := range t.poit.File {
-// if _f.FileInfo().IsDir() {continue}
-// t.buf[_f.Name] = _f
-// }
-
-// return nil
-// }
-
-// func (t *rZip) Read(path string) (*bytes.Buffer,string,error) {
-// t.Lock()
-// defer t.Unlock()
-
-// var timeLayoutStr = "2006-01-02 15:04:05"
-// var err error
-
-// if f,ok := t.buf[path];ok {
-// if rc, err := f.Open();err == nil {
-// defer rc.Close();
-
-// buf := new(bytes.Buffer)
-// buf.ReadFrom(rc)
-// return buf,f.FileHeader.Modified.Format(timeLayoutStr),nil
-// }
-// return &bytes.Buffer{},time.Now().UTC().Format(timeLayoutStr),err
-// }
-// return &bytes.Buffer{},time.Now().UTC().Format(timeLayoutStr),errors.New("not found")
-// }
-
-// func (t *rZip) List() []string {
-// var list []string
-// for k := range t.buf {
-// list=append(list,k)
-// }
-// return list
-// }
-
-// func (t *rZip) Close() {
-// t.poit.Close()
-// for k := range t.buf {
-// delete(t.buf, k)
-// }
-// }
\ No newline at end of file
"errors"
"io/ioutil"
"net/url"
+ compress "github.com/qydysky/part/compress"
// "encoding/binary"
)
}
type req struct {
- ResponseCode int
Respon []byte
+ Response *http.Response
UsedTime time.Duration
cancelOpen bool
if err = os.Rename(filepath+".dtmp", filepath); err != nil {return err}
return nil
}
- this.ResponseCode = resp.StatusCode
+ this.Response = resp
if !JustResponseCode {
defer resp.Body.Close()
if SaveToPath != "" && resp.StatusCode == 200 {
var err error
this.Respon,err = ioutil.ReadAll(resp.Body)
if err != nil {return err}
+ if compress_type := resp.Header[`Content-Encoding`];compress_type!=nil{
+ switch compress_type[0]{
+ case `br`:
+ if this.Respon,err = compress.UnBr(this.Respon);e != nil {return err}
+ case `gzip`:
+ if this.Respon,err = compress.UnGzip(this.Respon);e != nil {return err}
+ case `deflate`:
+ if this.Respon,err = compress.UnFlate(this.Respon);e != nil {return err}
+ default:
+ }
+ }
}
- }
+ } else {resp.Body.Close()}
this.UsedTime=time.Since(beginTime)
close(t.cancel)
t.cancelOpen = false
}
+}
+
+func Cookies_String_2_Map(Cookies string) (o map[string]string) {
+ o = make(map[string]string)
+ list := strings.Split(Cookies, `; `)
+ for _,v := range list {
+ s := strings.SplitN(v, "=", 2)
+ o[s[0]] = s[1]
+ }
+ return
+}
+
+func Map_2_Cookies_String(Cookies map[string]string) (o string) {
+ for k,v := range Cookies {
+ o += k +`=`+ v + `; `
+ }
+ t := []rune(o)
+ o = string(t[:len(t)-2])
+ return
+}
+
+func Cookies_List_2_Map(Cookies []*http.Cookie) (o map[string]string) {
+ o = make(map[string]string)
+ for _,v := range Cookies {
+ o[v.Name] = v.Value
+ }
+ return
}
\ No newline at end of file
--- /dev/null
+package part
+
+import (
+ br "github.com/andybalholm/brotli"
+ "bytes"
+ "io"
+ "io/ioutil"
+)
+
+func InBr(byteS []byte, level int) ([]byte,error) {
+ buf := bytes.NewBuffer(nil)
+ Write := br.NewWriterLevel(buf, level)
+ defer Write.Close()
+
+ // 写入待压缩内容
+ if _,err := Write.Write(byteS); err != nil {return buf.Bytes(),err}
+ if err := Write.Flush(); err != nil {return buf.Bytes(),err}
+ return buf.Bytes(),nil
+}
+
+func UnBr(byteS []byte) ([]byte,error) {
+ buf := bytes.NewBuffer(byteS)
+ Read := br.NewReader(buf)
+
+ rb, err := ioutil.ReadAll(Read)
+ if err == io.EOF || err == io.ErrUnexpectedEOF {
+ return rb, nil
+ }
+ return rb, err
+}
\ No newline at end of file
--- /dev/null
+package part
+
+import (
+ "testing"
+)
+
+func Test_Br(t *testing.T) {
+ s := []byte(`abc`)
+ t.Log(string(s))
+
+ b,e := InBr(s, 6)
+ if e != nil {t.Error(e);return}
+ t.Log(string(b))
+
+ c,e := UnBr(b)
+ if e != nil {t.Error(e);return}
+ t.Log(string(c))
+
+ for k,v := range c {
+ if v != []byte("abc")[k] {t.Error(`no match`)}
+ }
+}
--- /dev/null
+package part
+
+import (
+ "github.com/klauspost/compress/flate"
+ "bytes"
+ "io"
+ "io/ioutil"
+)
+
+func InFlate(byteS []byte, level int) ([]byte,error) {
+ buf := bytes.NewBuffer(nil)
+
+ // 创建一个flate.Write
+ flateWrite, err := flate.NewWriter(buf, level)
+ if err != nil {
+ return buf.Bytes(),err
+ }
+ defer flateWrite.Close()
+ // 写入待压缩内容
+ flateWrite.Write(byteS)
+ flateWrite.Flush()
+ return buf.Bytes(),nil
+}
+
+func UnFlate(byteS []byte) ([]byte,error) {
+ buf := bytes.NewBuffer(byteS)
+ // 创建一个flate.Write
+ flateRead := flate.NewReader(buf)
+ defer flateRead.Close()
+ // 写入待压缩内容
+ rb, err := ioutil.ReadAll(flateRead)
+ if err == io.EOF || err == io.ErrUnexpectedEOF {
+ return rb, nil
+ }
+ return rb, err
+}
\ No newline at end of file
--- /dev/null
+package part
+
+import (
+ "testing"
+)
+
+func Test_Flate(t *testing.T) {
+ s := []byte(`abc`)
+ t.Log(string(s))
+
+ b,e := InFlate(s, -1)
+ if e != nil {t.Error(e);return}
+ t.Log(string(b))
+
+ c,e := UnFlate(b)
+ if e != nil {t.Error(e);return}
+ t.Log(string(c))
+
+ for k,v := range c {
+ if v != []byte("abc")[k] {t.Error(`no match`)}
+ }
+}
--- /dev/null
+package part
+
+import (
+ gzip "github.com/klauspost/pgzip"
+ "bytes"
+ "io"
+ "io/ioutil"
+)
+
+func InGzip(byteS []byte, level int) ([]byte,error) {
+ buf := bytes.NewBuffer(nil)
+ Write,err := gzip.NewWriterLevel(buf, level)
+ if err != nil {
+ return buf.Bytes(),err
+ }
+ defer Write.Close()
+ // 写入待压缩内容
+ if _,err := Write.Write(byteS); err != nil {return buf.Bytes(),err}
+ if err := Write.Flush(); err != nil {return buf.Bytes(),err}
+ return buf.Bytes(),nil
+}
+
+func UnGzip(byteS []byte) ([]byte,error) {
+ buf := bytes.NewBuffer(byteS)
+ Read,err := gzip.NewReader(buf)
+ if err != nil {
+ return buf.Bytes(),err
+ }
+ defer Read.Close()
+ rb, err := ioutil.ReadAll(Read)
+ if err == io.EOF || err == io.ErrUnexpectedEOF {
+ return rb, nil
+ }
+ return rb, err
+}
\ No newline at end of file
--- /dev/null
+package part
+
+import (
+ "testing"
+)
+
+func Test_Gzip(t *testing.T) {
+ s := []byte(`abc`)
+ t.Log(string(s))
+
+ b,e := InGzip(s, -1)
+ if e != nil {t.Error(e);return}
+ t.Log(string(b))
+
+ c,e := UnGzip(b)
+ if e != nil {t.Error(e);return}
+ t.Log(string(c))
+
+ for k,v := range c {
+ if v != []byte("abc")[k] {t.Error(`no match`)}
+ }
+}
require (
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
+ github.com/andybalholm/brotli v1.0.1
github.com/go-ole/go-ole v1.2.4 // indirect
github.com/klauspost/compress v1.10.10
+ github.com/klauspost/pgzip v1.2.5
github.com/miekg/dns v1.1.31
github.com/shirou/gopsutil v2.20.7+incompatible
github.com/thedevsaddam/gojsonq v2.3.0+incompatible
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
+github.com/andybalholm/brotli v1.0.1 h1:KqhlKozYbRtJvsPrrEeXcO+N2l6NYT5A2QAFmSULpEc=
+github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE=
+github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo=
github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/shirou/gopsutil v2.20.6+incompatible h1:P37G9YH8M4vqkKcwBosp+URN5O8Tay67D2MbR361ioY=