package api
import (
"callapi"
"net/http"
"net/url"
)
type CallBack struct {}
func (c CallBack)PreRequest(req *http.Request, ctx *callapi.RestBirdCtx) {
newurl :="http://www.google.com/"
if u, err := url.Parse(newurl) ; err != nil {
return
} else {
req.URL = u
req.Host = u.Host
}
}
Set Request Header
package api
import (
"callapi"
"net/http"
)
type CallBack struct {}
func (c CallBack)PreRequest(req *http.Request, ctx *callapi.RestBirdCtx) {
//will add one more value 'abcd' to header 'aa'
req.Header.Add("aa", "abcd")
//will overwrite or set header 'cc' 's value to 'cdef'
req.Header.Set("cc", "cdef")
//delete header 'dd'
req.Header.Del("dd")
}
Set Request Query Parameter
package api
import (
"callapi"
"net/http"
"net/url"
)
type CallBack struct {}
func (c CallBack)PreRequest(req *http.Request, ctx *callapi.RestBirdCtx) {
m, err := url.ParseQuery(req.URL.RawQuery)
if err != nil {
return
}
//will add one more value 'abcd' to parameter 'aa'
m.Add("aa", "abcd")
//will overwrite parameter 'bb' 's value to 'bcdef'
m.Set("bb", "bcdef")
//delete the parameter 'cc'
m.Del("cc")
req.URL.RawQuery = m.Encode()
}
Set Text Request Body
package api
import "callapi"
import "net/http"
import "strconv"
import "bytes"
import "io"
import "io/ioutil"
type CallBack struct {}
func (c CallBack)PreRequest(req *http.Request, ctx *callapi.RestBirdCtx) {
data := []byte("this is raw body content")
var body io.Reader
body = bytes.NewReader(data)
rc, ok := body.(io.ReadCloser)
if !ok && body != nil {
rc = ioutil.NopCloser(body)
}
req.Body = rc
req.Header.Add("Content-Length", strconv.Itoa(len(data)))
}
Set Json Request Body
package api
import "callapi"
import "net/http"
import "strconv"
import "bytes"
import "encoding/json"
import "io"
import "io/ioutil"
type CallBack struct {}
type JsonBody struct {
Name string `json:"name"`
Password string `json:"password"`
}
func (c CallBack)PreRequest(req *http.Request, ctx *callapi.RestBirdCtx) {
reqdata := JsonBody{Name:"admin", Password:"admin"}
reqjsonbytes, err := json.Marshal(reqdata)
if err != nil {
return
}
var body io.Reader
body = bytes.NewReader(reqjsonbytes)
rc, ok := body.(io.ReadCloser)
if !ok && body != nil {
rc = ioutil.NopCloser(body)
}
req.Body = rc
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Content-Length", strconv.Itoa(len(reqjsonbytes)))
}
Set Form-Data Request Body
package api
import "callapi"
import "net/http"
import "net/url"
import "strconv"
import "bytes"
import "io"
import "io/ioutil"
type CallBack struct {}
func (c CallBack)PreRequest(req *http.Request, ctx *callapi.RestBirdCtx) {
data := url.Values{}
data.Set("aa", "abcd")
data.Set("bb", "cdefg")
var body io.Reader
body = bytes.NewBufferString(data.Encode())
rc, ok := body.(io.ReadCloser)
if !ok && body != nil {
rc = ioutil.NopCloser(body)
}
req.Body = rc
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
req.Header.Add("Content-Length", strconv.Itoa(len(data.Encode())))
}
Access Varibles
package api
import "callapi"
import "net/http"
import "fmt"
import "time"
type CallBack struct {}
func (c CallBack)PreRequest(req *http.Request, ctx *callapi.RestBirdCtx) {
hellovars := ctx.GetVars("hello")
fmt.Println("hello var is: " + hellovars)
ctx.SetVars("hello", "I am not world")
var mytime time.Time
if err := callapi.GetGlobalVars("currTime", &mytime); err != nil {
return err
}
mytime = time.Now()
if err := callapi.SetGlobalVars("currTime", mytime); err != nil {
return err
}
if err, mytoken := callapi.GetGlobalString("mytoken"); err != nil {
return err
} else {
callapi.SetGlobalString("mytoken", "hello world token")
}
}