1 Star 0 Fork 2

niniwowo / go-qq-openapi-v3

forked from Rex / go-qq-openapi-v3 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
sns_network.go 3.13 KB
一键复制 编辑 原始数据 按行查看 历史
Rex 提交于 2013-11-09 17:43 . improve send stat
//
//
//
package qqopenapi_v3
import (
"crypto/tls"
"errors"
"fmt"
"log"
"io/ioutil"
"net/url"
"net/http"
"strings"
. "github.com/ckrissun/go-simplejson"
)
type SNSNetwork struct {
_iplist *RandomString
_ipaddr string
_seceret string
_sig_name string
}
func NewSNSNetwork(iplist *RandomString, seceret, sig_name string) *SNSNetwork {
this := &SNSNetwork{}
if iplist != nil {
this._iplist = iplist
} else {
this._iplist = NewRandomString([]string{DEFAULT_QQ_OPENIP})
}
this._ipaddr = this._iplist.String()
this._seceret = seceret
this._sig_name = sig_name
return this
}
func (this *SNSNetwork) mk_send_data(method, url_path string, params url.Values) url.Values {
sig := hmac_sha1_sig(method, url_path, this._seceret, params)
params.Set(this._sig_name, sig)
return params
}
func (this *SNSNetwork) http_send(method, uri string, params url.Values) (*Json, error) {
var resp *http.Response
var err error
switch strings.ToLower(method) {
case "get":
if params != nil && params.Encode() != "" {
uri += "?" + params.Encode()
}
resp, err = http.Get(uri)
case "post":
resp, err = http.PostForm(uri, params)
default:
return nil, errors.New(fmt.Sprintf("method invalid: %s", method))
}
if err != nil {
log.Println(err)
return nil, err
}
defer resp.Body.Close()
var buf []byte
buf, err = ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return nil, err
}
var js *Json
js, err = NewJson(buf)
if err != nil {
log.Println(err)
}
return js, err
}
func (this *SNSNetwork) https_send(method, uri string, params url.Values) (*Json, error) {
var resp *http.Response
var err error
//http://stackoverflow.com/questions/12122159/golang-how-to-do-a-https-request-with-bad-certificate
var tr = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
var client = &http.Client{Transport: tr}
switch strings.ToLower(method) {
case "get":
if params != nil && params.Encode() != "" {
uri += "?" + params.Encode()
}
resp, err = client.Get(uri)
case "post":
resp, err = client.PostForm(uri, params)
default:
return nil, errors.New(fmt.Sprintf("method invalid: %s", method))
}
if err != nil {
log.Println(err)
return nil, err
}
defer resp.Body.Close()
var buf []byte
buf, err = ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return nil, err
}
var js *Json
js, err = NewJson(buf)
if err != nil {
log.Println(err)
}
return js, err
}
func (this *SNSNetwork) open(method, url_path, protocol string, params url.Values) (*Json, error) {
var ec_params = this.mk_send_data(method, url_path, params)
var uri = fmt.Sprintf("%s://%s%s", strings.ToLower(protocol), this._ipaddr, url_path)
var data *Json
var err error
switch strings.ToLower(protocol) {
case "http":
data, err = this.http_send(method, uri, ec_params)
case "https":
data, err = this.https_send(method, uri, ec_params)
default:
data, err = nil, errors.New(fmt.Sprintln("protocol invalid:", protocol))
log.Println(err)
}
return data, err
}
Go
1
https://gitee.com/niniwowo99/go-qq-openapi-v3.git
git@gitee.com:niniwowo99/go-qq-openapi-v3.git
niniwowo99
go-qq-openapi-v3
go-qq-openapi-v3
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891