Examples of Pre-Request By Golang

Set Url

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")
	}

}