Skip to content

Commit

Permalink
init
Browse files Browse the repository at this point in the history
  • Loading branch information
monkeyWie committed Apr 21, 2019
0 parents commit 853f40e
Show file tree
Hide file tree
Showing 10 changed files with 259 additions and 0 deletions.
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

debug
17 changes: 17 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
"env": {},
"args": []
}
]
}
11 changes: 11 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"go.formatTool": "goimports",
"go.useLanguageServer": true,
"go.alternateTools": {
"go-langserver": "gopls"
},
"go.languageServerExperimentalFeatures": {
"format": false,
"autoComplete": true
}
}
94 changes: 94 additions & 0 deletions down/down.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package down

import (
"bytes"
"fmt"
"io"
"io/ioutil"
"mime"
"net/http"
"os"
"strconv"
"strings"
)

// Resolve 解析下载请求
func Resolve(request *Request) (*Response, error) {
httpRequest, err := http.NewRequest(strings.ToUpper(request.Method), request.URL, nil)
if err != nil {
return nil, err
}
/* for k, v := range request.Header {
httpRequest.Header.Add(k, v)
} */
httpClient := &http.Client{}
response, err := httpClient.Do(httpRequest)
if err != nil {
return nil, err
}
if response.StatusCode != 200 && response.StatusCode != 206 {
fmt.Println(response.Header)
body, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(body))
return nil, fmt.Errorf("Response status error:%d", response.StatusCode)
}

ret := &Response{}

//解析文件名
contentDisposition := response.Header.Get("Content-Disposition")
if contentDisposition != "" {
_, params, _ := mime.ParseMediaType(contentDisposition)
filename := params["filename"]
if filename != "" {
ret.Name = filename
}
}
if ret.Name == "" {

}
//解析文件大小
contentLength := response.Header.Get("Content-Length")
if contentLength != "" {
ret.size, _ = strconv.ParseInt(contentLength, 10, 64)
}
//判断是否支持分段下载
ret.Partial = ret.size > 0 && response.StatusCode == 206
return ret, nil
}

// Down 下载
func Down(request *Request) {
httpRequest, err := http.NewRequest(request.Method, request.URL, bytes.NewReader(request.content))
if err != nil {
fmt.Println("create http request error")
return
}
for k, v := range request.Header {
httpRequest.Header.Add(k, v)
}
httpClient := &http.Client{}
response, err := httpClient.Do(httpRequest)
if err != nil {
fmt.Printf("do http request error:%s\n", err)
return
}
if response.StatusCode >= 200 && response.StatusCode < 300 {
_, params, _ := mime.ParseMediaType(response.Header.Get("Content-Disposition"))
filename := params["filename"]
if len(filename) > 0 {
fmt.Printf("filename:%s\n", filename)
}
}

fmt.Printf("response status:%d %s\n", response.StatusCode, response.Status)
fmt.Printf("response heads:%v\n", response.Header)
file, err := os.Create("test.txt")
if err != nil {
fmt.Println("create file error")
return
}
defer file.Close()
fmt.Println("file close")
io.Copy(file, response.Body)
}
87 changes: 87 additions & 0 deletions down/down_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package down

import (
"reflect"
"testing"
)

func TestDown(t *testing.T) {
type args struct {
request *Request
}
tests := []struct {
name string
args args
}{
{
"readme",
args{
&Request{
"get",
"https://raw.githubusercontent.com/proxyee-down-org/proxyee-down/master/README.md",
map[string]string{
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Host": "raw.githubusercontent.com",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
},
nil,
},
},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Down(tt.args.request)
})
}
}

func TestResolve(t *testing.T) {
type args struct {
request *Request
}
tests := []struct {
name string
args args
want *Response
wantErr bool
}{
{
"proxyee-down",
args{
&Request{
"get",
"https://github.com/proxyee-down-org/proxyee-down/releases/download/3.4/proxyee-down-main.jar",
map[string]string{
"Host": "github.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Referer": "https://github.com/proxyee-down-org/proxyee-down/releases",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
},
nil,
},
},
&Response{"proxyee-down-main.jar", 30159703, false},
false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := Resolve(tt.args.request)
if (err != nil) != tt.wantErr {
t.Errorf("Resolve() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("Resolve() = %v, want %v", got, tt.want)
}
})
}
}
8 changes: 8 additions & 0 deletions down/request.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package down

type Request struct {
Method string
URL string
Header map[string]string
content []byte
}
7 changes: 7 additions & 0 deletions down/response.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package down

type Response struct {
Name string
size int64
Partial bool
}
8 changes: 8 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module pdown-core

go 1.12

require (
github.com/karalabe/xgo v0.0.0-20190301120235-2d6d1848fb02 // indirect
github.com/zserge/webview v0.0.0-20190123072648-16c93bcaeaeb
)
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
github.com/karalabe/xgo v0.0.0-20190301120235-2d6d1848fb02 h1:nI4Q7WQDcng8eRmi8bRP1SXlJIYLkgdgR7ZhJuzPbhs=
github.com/karalabe/xgo v0.0.0-20190301120235-2d6d1848fb02/go.mod h1:iYGcTYIPUvEWhFo6aKUuLchs+AV4ssYdyuBbQJZGcBk=
github.com/zserge/webview v0.0.0-20190123072648-16c93bcaeaeb h1:zVjnyZIM7UtkG3dNckiudIm+TUHkZqi5xlVQPd3J6/c=
github.com/zserge/webview v0.0.0-20190123072648-16c93bcaeaeb/go.mod h1:a1CV8KR4Dd1eP2g+mEijGOp+HKczwdKHWyx0aPHKvo4=
9 changes: 9 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package main

import "github.com/zserge/webview"

func main() {
// Open wikipedia in a 800x600 resizable window
webview.Open("Minimal webview example",
"https://www.baidu.com", 800, 600, true)
}

0 comments on commit 853f40e

Please sign in to comment.