-
Notifications
You must be signed in to change notification settings - Fork 64
Open
Description
go
import (
"bytes"
"context"
"encoding/json"
"errors"
"fmt"
"github.com/qiniu/go-sdk/v7/auth"
"io"
"log"
"net/http"
"regexp"
"strings"
"time"
"github.com/qiniu/go-sdk/auth/v7"
)
type SevenCow struct {
cred *auth.Credentials
Ak string
Sk string
host string
fusionHost string // fusion相关api
timeout time.Duration
}
func NewSevenCow(ak string, sk string) *SevenCow {
return &SevenCow{
Ak: ak,
Sk: sk,
cred: auth.New(ak, sk),
host: "api.qiniu.com",
fusionHost: "https://fusion.qiniuapi.com", // 为了单元测试,host配置带http(s)
timeout: time.Second * 30,
}
}
func (c SevenCow) send(method, url string, bodyArg, result interface{}) error {
ct, cancelFunc := context.WithTimeout(context.Background(), c.timeout)
defer cancelFunc()
buf := new(bytes.Buffer)
if bodyArg != nil {
err := json.NewEncoder(buf).Encode(bodyArg)
if err != nil {
return err
}
}
req, err := http.NewRequestWithContext(ct, method, url, buf)
if err != nil {
return err
}
req.Header.Set("Content-Type", "application/json")
token, err := c.cred.SignRequest(req)
if err != nil {
return err
}
req.Header.Set("Authorization", "QBox "+token)
response, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer response.Body.Close()
all, err := io.ReadAll(response.Body)
if err != nil {
return err
}
if response.StatusCode != 200 {
marshal, _ := json.Marshal(bodyArg)
return fmt.Errorf("%s %s --------- %d --- %s", method+url, string(marshal), response.StatusCode, string(all))
}
if result != nil {
err = json.Unmarshal(all, result)
if err != nil {
return errors.New(string(all) + err.Error())
}
}
return nil
}
//获取域名列表
func (c SevenCow) CdnDomainList() (*RetDomainList, error) {
// https://developer.qiniu.com/fusion/4246/the-domain-name#9
url := fmt.Sprintf("https://%s/domain?limit=%d", c.host, 1000)
result := new(RetDomainList)
return result, c.send(http.MethodGet, url, nil, result)
}
testcase
import (
"testing"
)
func TestSevenCow_CdnDomainList(t *testing.T) {
list, err := NewSevenCow("IAM-xxxxxx", "xxx-xxxx-xx").CdnDomainList()
if err != nil {
t.Error(err)
}
t.Log(list)
}
Metadata
Metadata
Assignees
Labels
No labels