123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- // Copyright (c) 2015-2019 Jeevanandam M. (jeeva@myjeeva.com), All rights reserved.
- // resty source code and usage is governed by a MIT style
- // license that can be found in the LICENSE file.
- package resty_test
- import (
- "crypto/tls"
- "fmt"
- "io/ioutil"
- "log"
- "net/http"
- "os"
- "strconv"
- "time"
- "golang.org/x/net/proxy"
- "gopkg.in/resty.v1"
- )
- type DropboxError struct {
- Error string
- }
- type AuthSuccess struct {
- /* variables */
- }
- type AuthError struct {
- /* variables */
- }
- type Article struct {
- Title string
- Content string
- Author string
- Tags []string
- }
- type Error struct {
- /* variables */
- }
- //
- // Package Level examples
- //
- func Example_get() {
- resp, err := resty.R().Get("http://httpbin.org/get")
- fmt.Printf("\nError: %v", err)
- fmt.Printf("\nResponse Status Code: %v", resp.StatusCode())
- fmt.Printf("\nResponse Status: %v", resp.Status())
- fmt.Printf("\nResponse Body: %v", resp)
- fmt.Printf("\nResponse Time: %v", resp.Time())
- fmt.Printf("\nResponse Received At: %v", resp.ReceivedAt())
- }
- func Example_enhancedGet() {
- resp, err := resty.R().
- SetQueryParams(map[string]string{
- "page_no": "1",
- "limit": "20",
- "sort": "name",
- "order": "asc",
- "random": strconv.FormatInt(time.Now().Unix(), 10),
- }).
- SetHeader("Accept", "application/json").
- SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F").
- Get("/search_result")
- printOutput(resp, err)
- }
- func Example_post() {
- // POST JSON string
- // No need to set content type, if you have client level setting
- resp, err := resty.R().
- SetHeader("Content-Type", "application/json").
- SetBody(`{"username":"testuser", "password":"testpass"}`).
- SetResult(AuthSuccess{}). // or SetResult(&AuthSuccess{}).
- Post("https://myapp.com/login")
- printOutput(resp, err)
- // POST []byte array
- // No need to set content type, if you have client level setting
- resp1, err1 := resty.R().
- SetHeader("Content-Type", "application/json").
- SetBody([]byte(`{"username":"testuser", "password":"testpass"}`)).
- SetResult(AuthSuccess{}). // or SetResult(&AuthSuccess{}).
- Post("https://myapp.com/login")
- printOutput(resp1, err1)
- // POST Struct, default is JSON content type. No need to set one
- resp2, err2 := resty.R().
- SetBody(resty.User{Username: "testuser", Password: "testpass"}).
- SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}).
- SetError(&AuthError{}). // or SetError(AuthError{}).
- Post("https://myapp.com/login")
- printOutput(resp2, err2)
- // POST Map, default is JSON content type. No need to set one
- resp3, err3 := resty.R().
- SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}).
- SetResult(&AuthSuccess{}). // or SetResult(AuthSuccess{}).
- SetError(&AuthError{}). // or SetError(AuthError{}).
- Post("https://myapp.com/login")
- printOutput(resp3, err3)
- }
- func Example_dropboxUpload() {
- // For example: upload file to Dropbox
- // POST of raw bytes for file upload.
- file, _ := os.Open("/Users/jeeva/mydocument.pdf")
- fileBytes, _ := ioutil.ReadAll(file)
- // See we are not setting content-type header, since go-resty automatically detects Content-Type for you
- resp, err := resty.R().
- SetBody(fileBytes). // resty autodetects content type
- SetContentLength(true). // Dropbox expects this value
- SetAuthToken("<your-auth-token>").
- SetError(DropboxError{}).
- Post("https://content.dropboxapi.com/1/files_put/auto/resty/mydocument.pdf") // you can use PUT method too dropbox supports it
- // Output print
- fmt.Printf("\nError: %v\n", err)
- fmt.Printf("Time: %v\n", resp.Time())
- fmt.Printf("Body: %v\n", resp)
- }
- func Example_put() {
- // Just one sample of PUT, refer POST for more combination
- // request goes as JSON content type
- // No need to set auth token, error, if you have client level settings
- resp, err := resty.R().
- SetBody(Article{
- Title: "go-resty",
- Content: "This is my article content, oh ya!",
- Author: "Jeevanandam M",
- Tags: []string{"article", "sample", "resty"},
- }).
- SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
- SetError(&Error{}). // or SetError(Error{}).
- Put("https://myapp.com/article/1234")
- printOutput(resp, err)
- }
- func Example_clientCertificates() {
- // Parsing public/private key pair from a pair of files. The files must contain PEM encoded data.
- cert, err := tls.LoadX509KeyPair("certs/client.pem", "certs/client.key")
- if err != nil {
- log.Fatalf("ERROR client certificate: %s", err)
- }
- resty.SetCertificates(cert)
- }
- func Example_customRootCertificate() {
- resty.SetRootCertificate("/path/to/root/pemFile.pem")
- }
- //
- // top level method examples
- //
- func ExampleNew() {
- // Creating client1
- client1 := resty.New()
- resp1, err1 := client1.R().Get("http://httpbin.org/get")
- fmt.Println(resp1, err1)
- // Creating client2
- client2 := resty.New()
- resp2, err2 := client2.R().Get("http://httpbin.org/get")
- fmt.Println(resp2, err2)
- }
- //
- // Client object methods
- //
- func ExampleClient_SetCertificates() {
- // Parsing public/private key pair from a pair of files. The files must contain PEM encoded data.
- cert, err := tls.LoadX509KeyPair("certs/client.pem", "certs/client.key")
- if err != nil {
- log.Fatalf("ERROR client certificate: %s", err)
- }
- resty.SetCertificates(cert)
- }
- //
- // Resty Socks5 Proxy request
- //
- func Example_socks5Proxy() {
- // create a dialer
- dialer, err := proxy.SOCKS5("tcp", "127.0.0.1:9150", nil, proxy.Direct)
- if err != nil {
- log.Fatalf("Unable to obtain proxy dialer: %v\n", err)
- }
- // create a transport
- ptransport := &http.Transport{Dial: dialer.Dial}
- // set transport into resty
- resty.SetTransport(ptransport)
- resp, err := resty.R().Get("http://check.torproject.org")
- fmt.Println(err, resp)
- }
- func printOutput(resp *resty.Response, err error) {
- fmt.Println(resp, err)
- }
|