From fa336ffc2dbbf9f79648158b2673f3a9a7310c05 Mon Sep 17 00:00:00 2001 From: ahuigo <1781999+ahuigo@users.noreply.github.com> Date: Thu, 28 Sep 2023 18:28:57 +0800 Subject: [PATCH] example: add more examples about ssl, debug, curl, trace, error, etc. --- .gitignore | 9 ++--- conf/nginx.crt | 19 +++++++++ conf/nginx.key | 28 +++++++++++++ example1/req_build_test.go | 51 ------------------------ example1/req_header_global_test.go | 22 ---------- example1/req_option_test.go | 26 ------------ example1/trace_test.go | 23 ----------- examples/auth_test.go | 2 +- examples/context_test.go | 2 +- examples/cookie_test.go | 46 +++++++++++++++------ examples/debug_curl_test.go | 41 +++++++++++++++++++ examples/debug_test.go | 31 +------------- examples/debug_trace_test.go | 27 +++++++++++++ examples/delete_test.go | 2 +- examples/error_test.go | 6 +-- examples/get_test.go | 17 ++++++-- examples/post_file_test.go | 2 +- examples/post_test.go | 2 +- examples/req_header_test.go | 2 +- examples/response_build_test.go | 2 +- examples/response_test.go | 2 +- examples/retry_test.go | 2 +- examples/server_test.go | 2 +- {example1 => examples}/ssl_test.go | 49 ++++++++++++----------- examples/timeout_test.go | 2 +- {example1 => examples}/transport_test.go | 12 +++--- request.go | 3 ++ response.go | 10 ++--- util_curl.go | 8 ++-- 29 files changed, 226 insertions(+), 224 deletions(-) create mode 100644 conf/nginx.crt create mode 100644 conf/nginx.key delete mode 100644 example1/req_build_test.go delete mode 100644 example1/req_header_global_test.go delete mode 100644 example1/req_option_test.go delete mode 100644 example1/trace_test.go create mode 100644 examples/debug_curl_test.go create mode 100644 examples/debug_trace_test.go rename {example1 => examples}/ssl_test.go (73%) rename {example1 => examples}/transport_test.go (71%) diff --git a/.gitignore b/.gitignore index cd236c63..5f673f2d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ # Compiled Object files, Static and Dynamic libs (Shared Objects) *.o -.vscode/ *.a *.so @@ -27,8 +26,8 @@ _testmain.go coverage.out coverage.txt -# Mac osx -.DS_Store - -# Exclude intellij IDE folders +# Exclude IDE folders .idea/* +.vscode/* +__debug_bin +.DS_Store diff --git a/conf/nginx.crt b/conf/nginx.crt new file mode 100644 index 00000000..321ef35f --- /dev/null +++ b/conf/nginx.crt @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDIjCCAgqgAwIBAgIUPkbRM1znk+3fLI8g5eB5i8Ie3K0wDQYJKoZIhvcNAQEL +BQAwFTETMBEGA1UEAwwKbG9jYWwuc2VsZjAeFw0yMzAzMjgwMzQ1MDlaFw0yNDAz +MjcwMzQ1MDlaMBUxEzARBgNVBAMMCmxvY2FsLnNlbGYwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIdnZmgBgAGOChpZGwikpQgTRTkqFNKQV5jRQXr7r7 +3xV+PilkDShz+UWfYG3zszLX7L9jllIDj1V5YALV+f3tjDaPnptSUnNIKIdjripQ +ojX5639oCmHA4ZnYbDxx8GcNlfOLGW4oAVuY9PHaL69nmrHq58wQX2VPR6jCjzCY +T0putkMCRbCTbzeb0ntcEHNKrVuk8TlLxGnNNXyeF1BS6YHa9/3PwXmwsApZ1fY2 +KepHclqVISz+E0Cj4KkVvGI++9KBBDcNMEyerhU0ocotXoqQxQKm+eeED44LKnnh +czPION+xRTfsqn+j8AyrShY+JkBt+VseOlOeNpn25p5dAgMBAAGjajBoMB0GA1Ud +DgQWBBQ8aBcGhCLZzEGztBxgChe+zIY88TAfBgNVHSMEGDAWgBQ8aBcGhCLZzEGz +tBxgChe+zIY88TAPBgNVHRMBAf8EBTADAQH/MBUGA1UdEQQOMAyCCmxvY2FsLnNl +bGYwDQYJKoZIhvcNAQELBQADggEBAHBKNQHNBlRdI6cICeEkBYpoJRg1UBCEpxPo +A7He5EN1vZReJcMoFoc86tPsvUaIwsgqiEu6S0sQNahJHKF0FwcB+A6F9kQmW7si +CrQw9hHneooEmYs2CldNV4w51HWKNDZ5Ra+gH5B2AKR1EWFDh4MMzPlL2MPgasFC +OeAOFrftD8hLLSvCvDsIall/pOg6wTP5vimndsjw+fPk7/SRAqZZzM1EQ4WZ7uZq +oRXdSOhtfyEZYsC04VQNT0KAD+m73ctYXn4EHRpHx5tA1ZkKuuOLOXSVYmHRkk72 +ReutF5Khp+XIjc77fHX6KRCWxT/KE23a4aEmmJzKhV3A1bcvpQ4= +-----END CERTIFICATE----- diff --git a/conf/nginx.key b/conf/nginx.key new file mode 100644 index 00000000..2ec16d60 --- /dev/null +++ b/conf/nginx.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDIdnZmgBgAGOCh +pZGwikpQgTRTkqFNKQV5jRQXr7r73xV+PilkDShz+UWfYG3zszLX7L9jllIDj1V5 +YALV+f3tjDaPnptSUnNIKIdjripQojX5639oCmHA4ZnYbDxx8GcNlfOLGW4oAVuY +9PHaL69nmrHq58wQX2VPR6jCjzCYT0putkMCRbCTbzeb0ntcEHNKrVuk8TlLxGnN +NXyeF1BS6YHa9/3PwXmwsApZ1fY2KepHclqVISz+E0Cj4KkVvGI++9KBBDcNMEye +rhU0ocotXoqQxQKm+eeED44LKnnhczPION+xRTfsqn+j8AyrShY+JkBt+VseOlOe +Npn25p5dAgMBAAECggEAYB1AdrPbDgzfg1Gt0V309LWGX72xvhu5hsaoSBUXS5Vy +KjXmxZRzfWuawKhM/6g/a/0U5MxZpWBPhKMOqQa0g/WS4XiUEzv6DzJze80xd7jW +tW3/B+TWatMgXv7CWoT//CkV/O8j/GVuRB/JaCot6ThoLu+VzZHXstPya9qY26Vr +Evc6NF+MED/n2ciagBAJzSEG0L8Ry948Vbzz3yEu1p9Mdg31AVWu6/m4LfMWB7km +rtpSiPdZwqVCsTjGRb2T4hF3TmMgBC1+0meDMxd33xws1XaOoGwaqwdgMpIdowTK +DBonkT10De6cqjtVg/IqeZvmCZl4al4lkSzfGtwGRwKBgQDyx0kQw8D6PpMQ4YSk +cFgVgEwJ2ED2yVlOqnOpw+cFG+k9AlS9VuLOYDyuxsLCX4VdbGitmBnd70E3Zpnj +V74Tqu+nnUr/i8BDl8XG+EceBW+xpMgVIaMnKHbWa3RcIKU4CALbtDL0sl8l96Ch +NxjNje3E/E9hmAeFSBr6zsqPEwKBgQDTYTqzGMeBk7oNE0YonR8UxX1Ah5tSU9Eu +usY1vYGv3FoeJR1RexN7+o4rFxVN+cVy3Mwpml1ptPRZP1V3NGZCCObOaOU4Pplt +HjzhClBTeIsbmZ1Bq/MoRaXp4yykPkHaniR+d7/GjwnSrIzyupsWAe2fPfeIx1/K +VFg1eLcazwKBgQCuv/16wLy2I7ZuDzYPuwHcMCYLbAqO2K2c7xokF2vBhK6lCHmA +c/r7e9ASKeVkTadMcM0ELxhnZGD4BLU+LBkYRREOAC1MtgYlYSiuKGXgWR9lqeuP +MlAizoCDpIL0EVd7dmDATfvjoETWqmCHyoXi54c/JDHrWKgJKrao05J/2wKBgDxu +H4n0G5U/1oDGcdhKkwgtLZG1MwJmU/c4DlJuyxSrulfD5I3W0csv5lULVFvmfDxK +Q1PhfbMquHCLWrOpl1JpmRKJin555wL7EgyEFlLGs35AfGS589ofjz8+YxTRd6I4 +c9Z0Ba+OVRCVo/YAwzWXd4d+/7VqykfdtRoUWMShAoGAVamX3xdVKVUH1vkbcW47 +MZMvli5qeWFKkjNYzAIkHCOKgP+LcOhj2yywSliXZjBP3/AM4IyTf85rL7WWUHs9 +M9V6iy4s0v95+NQ3gBhU8dqGZMlMAfHTdOYP5QZWKQQfF0iGHDH6faEsdBBWiqhI +laxSnUjUN5VMS/ViBExyBQs= +-----END PRIVATE KEY----- diff --git a/example1/req_build_test.go b/example1/req_build_test.go deleted file mode 100644 index e372965e..00000000 --- a/example1/req_build_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package examples - -import ( - ioutil "io" - "regexp" - "testing" - - "github.com/ahuigo/requests/v2" -) - -// TestBuildRequest -func TestBuildRequest(t *testing.T) { - req, err := requests.BuildRequest("post", "http://baidu.com/a/b/c", requests.Json{ - "age": 1, - }) - if err != nil { - t.Fatal(err) - } - body, _ := ioutil.ReadAll(req.Body) - expectedBody := `{"age":1}` - if string(body) != expectedBody { - t.Fatal("Failed to build request") - } -} -func TestBuildCurlRequest(t *testing.T) { - req, _ := requests.BuildRequest("post", "https://baidu.com/path?q=curl&v=1", requests.Json{ - "age": 1, - }) - curl := requests.BuildCurlRequest(req) - if !regexp.MustCompile(`^curl -X POST .+ 'https://baidu.com/path\?q=curl&v=1'`).MatchString(curl) { - t.Fatal(`bad curl cmd: ` + curl) - } - t.Log(curl) -} - -func TestBuildRequestHost(t *testing.T) { - req, err := requests.BuildRequest("post", "http://baidu.com/a/b/c", requests.Json{ - "age": 1, - }) - if err != nil { - t.Fatal(err) - } - if req.Host != "baidu.com" { - t.Fatalf("bad host:%s\n", req.Host) - } - - req, _ = requests.BuildRequest("post", "http://baidu.com/a/b/c", requests.Header{"Host": "ahuigo.com"}) - if req.Host != "ahuigo.com" { - t.Fatalf("bad host:%s\n", req.Host) - } -} diff --git a/example1/req_header_global_test.go b/example1/req_header_global_test.go deleted file mode 100644 index ce3464f2..00000000 --- a/example1/req_header_global_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package examples - -import ( - "testing" - - "github.com/ahuigo/requests/v2" -) - -// Set session headers -func TestSendGlobalHeader2(t *testing.T) { - session := requests.R() - - headerK := "User-Agent" - headerV := "Custom-Test-Go-User-Agent" - req, err := session.SetGlobalHeader(headerK, headerV).BuildRequest("post", "http://baidu.com/a/b/c") - if err != nil { - t.Fatal(err) - } - if req.Header.Get(headerK) != headerV { - t.Fatalf("Expected header %s is %s", headerK, headerV) - } -} diff --git a/example1/req_option_test.go b/example1/req_option_test.go deleted file mode 100644 index 92fd79e2..00000000 --- a/example1/req_option_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package examples - -import ( - "testing" - - "github.com/ahuigo/requests/v2" -) - -// Test Session with cookie -func TestSessionWithCookie(t *testing.T) { - ts := createHttpbinServer(0) - defer ts.Close() - - req := requests.R().SetDebug() - _, err := req.Get(ts.URL + "/cookie/count") - if err != nil { - t.Fatal(err) - } - resp, err := req.Get(ts.URL + "/cookie/count") - if err != nil { - t.Fatal(err) - } - if resp.GetCookie("count") != "2" { - t.Fatal("Failed to set cookie count") - } -} diff --git a/example1/trace_test.go b/example1/trace_test.go deleted file mode 100644 index eead3bba..00000000 --- a/example1/trace_test.go +++ /dev/null @@ -1,23 +0,0 @@ -/** - * refer to: git@github.com:go-resty/resty.git - */ -package examples - -import ( - "testing" - - "github.com/ahuigo/requests/v2" -) - -// test context: cancel multi -func TestTrace(t *testing.T) { - ts := createHttpbinServer(0) - defer ts.Close() - - params := requests.Params{"name": "ahuigo", "page": "1"} - resp, err := requests.R().SetDebug().Get(ts.URL+"/get", params) - if err != nil { - t.Fatal(err) - } - t.Logf("connTime:%+v", resp.TraceInfo.ConnTime) -} diff --git a/examples/auth_test.go b/examples/auth_test.go index 75e6d3a6..2df54f9f 100644 --- a/examples/auth_test.go +++ b/examples/auth_test.go @@ -4,7 +4,7 @@ import ( "strings" "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) diff --git a/examples/context_test.go b/examples/context_test.go index 98f92f4d..26c0b36b 100644 --- a/examples/context_test.go +++ b/examples/context_test.go @@ -10,7 +10,7 @@ import ( "testing" "time" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) // test context: cancel multi diff --git a/examples/cookie_test.go b/examples/cookie_test.go index cf71fad7..c479ee5f 100644 --- a/examples/cookie_test.go +++ b/examples/cookie_test.go @@ -2,9 +2,10 @@ package examples import ( "net/http" + "strings" "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) func TestSendCookie(t *testing.T) { @@ -15,7 +16,7 @@ func TestSendCookie(t *testing.T) { Cookies struct{ Token string } }{} - resp, err := resty.New().R().SetResult(&data).SetHeader("Cookie","token=1234").Get(ts.URL + "/cookie/count") + resp, err := resty.New().R().SetResult(&data).SetHeader("Cookie", "token=1234").Get(ts.URL + "/cookie/count") if err != nil { panic(err) } @@ -31,7 +32,7 @@ func TestSessionCookie(t *testing.T) { defer ts.Close() result := struct { - Cookies struct{ + Cookies struct { Count string Name1 string Name2 string @@ -52,7 +53,7 @@ func TestSessionCookie(t *testing.T) { session.SetCookie(cookie1).Get(ts.URL + "/cookie/count") // 2. set cookie2 and get all cookies - resp, err := session.SetCookie(cookie2).SetResult(&result).Get(ts.URL+"/cookie/count") + resp, err := session.SetCookie(cookie2).SetResult(&result).Get(ts.URL + "/cookie/count") if err != nil { t.Fatal(err) } @@ -80,6 +81,10 @@ func TestSessionCookieWithClone(t *testing.T) { url := ts.URL + "/cookie/count" defer ts.Close() + client := resty.New() + req := client.R() + + // set cookie cookie1 := &http.Cookie{ Name: "name1", Value: "value1", @@ -89,26 +94,43 @@ func TestSessionCookieWithClone(t *testing.T) { Name: "name2", Value: "value2", } - session := resty.New().R() // 1. set cookie1 - session.SetCookie(cookie1).Get(url) + client.SetCookie(cookie1) + req.SetCookie(cookie1).Get(url) // 2. set cookie2 and get all cookies - resp, err := session.SetCookie(cookie2).Get(url) + resp, err := req.SetCookie(cookie2).Get(url) if err != nil { t.Fatal(err) } - cookies := map[string]string{} + + // 3. check cookies: client, response + respCookies := map[string]string{} + clientCookies := map[string]string{} // cookies's type is `[]*http.Cookies` for _, c := range resp.Cookies() { - if _, exists := cookies[c.Name]; exists { + if _, exists := respCookies[c.Name]; exists { t.Fatal("duplicated cookie:", c.Name, c.Value) } - cookies[c.Name] = c.Value + respCookies[c.Name] = c.Value } - if resp.GetCookie("name1") != "value1" || resp.GetCookie("name2") != "value2" { - t.Fatalf("Failed to send valid cookie(%+v)", resp.Cookies()) + for _, c := range client.Cookies { + if _, exists := clientCookies[c.Name]; exists { + t.Fatal("duplicated cookie:", c.Name, c.Value) + } + clientCookies[c.Name] = c.Value + } + if clientCookies["name1"] != "value1" || respCookies["count"] == "" { + t.Fatalf("bad cookie, respCookies=%+v, clientCookies=%+v", resp.Cookies(), client.Cookies) + } + + // 4. check response body + body := resp.String() + if (!strings.Contains(body, `"name1"`) || + !strings.Contains(body, `"name2"`) || + !strings.Contains(body, `"count"`) ){ + t.Fatalf("invalid response: %s", body) } } diff --git a/examples/debug_curl_test.go b/examples/debug_curl_test.go new file mode 100644 index 00000000..31490e6a --- /dev/null +++ b/examples/debug_curl_test.go @@ -0,0 +1,41 @@ +package examples + +import ( + "net/http" + "strings" + "testing" + + "github.com/go-resty/resty/v3" +) + + +func TestDebugCurl(t *testing.T) { + ts := createHttpbinServer(0) + defer ts.Close() + + req := resty.New().R().SetBody(MapString{ + "name": "Alex", + }).SetCookies( + []*http.Cookie{ + { Name: "count", Value: "1", }, + }, + ).EnableCurl() + + // 1. generate curl before request + curl_before_req := req.GetCurlCmd() + if !strings.Contains(curl_before_req, "Cookie: count=1") || !strings.Contains(curl_before_req, "curl -X GET") { + t.Fatal("bad curl:", curl_before_req) + } + + // 2. send request + resp, err := req.Post(ts.URL+"/post",) + if err != nil { + t.Fatal(err) + } + + // 3. generate curl after request + curl_after_req := resp.Request.GetCurlCmd() + if !strings.Contains(curl_after_req, "Cookie: count=1") || !strings.Contains(curl_after_req, "curl -X POST") { + t.Fatal("bad curl:", curl_after_req) + } +} \ No newline at end of file diff --git a/examples/debug_test.go b/examples/debug_test.go index 9a87933d..6f077deb 100644 --- a/examples/debug_test.go +++ b/examples/debug_test.go @@ -1,41 +1,12 @@ package examples import ( - "net/http" - "strings" "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) -func TestDebugCurl(t *testing.T) { - ts := createHttpbinServer(0) - defer ts.Close() - - request := resty.New().R().SetBody(MapString{ - "name": "Alex", - }).SetCookies( - []*http.Cookie{ - { Name: "count", Value: "1", }, - }, - ).EnableCurl() - curl1 := request.GetCurlCmd() - if !strings.Contains(curl1, "Cookie: count=1") || !strings.Contains(curl1, "curl -X POST") { - t.Fatal("bad curl:", curl1) - } - - resp, err := request.Post(ts.URL+"/post",) - if err != nil { - t.Fatal(err) - } - //debug curl requests - curl := resp.Request.GetCurlCmd() - if !strings.Contains(curl, "Cookie: count=1") || !strings.Contains(curl, "curl -X POST") { - t.Fatal("bad curl:", curl) - } -} - func TestDebugRequestAndResponse(t *testing.T) { ts := createHttpbinServer(0) defer ts.Close() diff --git a/examples/debug_trace_test.go b/examples/debug_trace_test.go new file mode 100644 index 00000000..22b5932a --- /dev/null +++ b/examples/debug_trace_test.go @@ -0,0 +1,27 @@ +/** + * refer to: git@github.com:go-resty/resty.git + */ +package examples + +import ( + "testing" + + "github.com/go-resty/resty/v3" +) + +// test context: cancel multi +func TestTrace(t *testing.T) { + ts := createHttpbinServer(0) + defer ts.Close() + + client := resty.New().EnableTrace() + req := client.R().SetBody(MapString{ "name": "Alex", }) + resp, err := req.Post(ts.URL+"/post",) + if err != nil { + t.Fatal(err) + } + traceInfo := resp.Request.TraceInfo() + if traceInfo.TotalTime <= 0 { + t.Fatalf("invalid traceInfo: %+v\n body:%s", traceInfo, resp.String()) + } +} diff --git a/examples/delete_test.go b/examples/delete_test.go index 010ac319..4a9ec82f 100644 --- a/examples/delete_test.go +++ b/examples/delete_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) // Delete Form Request diff --git a/examples/error_test.go b/examples/error_test.go index 923d52a3..33465cda 100644 --- a/examples/error_test.go +++ b/examples/error_test.go @@ -8,7 +8,7 @@ import ( "context" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) func TestErrorConnnect(t *testing.T) { @@ -48,8 +48,8 @@ func TestErrorURL(t *testing.T) { t.Fatalf("not expected url error:%+v", err) } - if err2.Op != "parse" { - t.Fatalf("unexpected error:%+v", err2) + if err2.Op != "Get" { + t.Fatalf("unexpected error(op=%s,err=%+v)", err2.Op,err2) } } diff --git a/examples/get_test.go b/examples/get_test.go index 31f90944..84d7a45b 100644 --- a/examples/get_test.go +++ b/examples/get_test.go @@ -4,7 +4,7 @@ import ( "net/url" "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) var client = resty.New() @@ -14,14 +14,25 @@ func TestGetJson(t *testing.T) { ts := createHttpbinServer(0) defer ts.Close() - // resp, err := requests.Get("https://httpbin.org/json") var json map[string]interface{} _, err := resty.New().R().SetResult(&json).Get(ts.URL + "/get") - if err == nil { + if err != nil { + t.Fatal(err) + }else { t.Logf("response json:%#v\n", json) } +} + +// Get example: fetch string response +func TestGetBody(t *testing.T) { + ts := createHttpbinServer(0) + defer ts.Close() + + resp, err := resty.New().R().Get(ts.URL + "/get") if err != nil { t.Fatal(err) + }else { + t.Logf("response body:%#v\n", string(resp.Body())) } } diff --git a/examples/post_file_test.go b/examples/post_file_test.go index 274fc579..9d008660 100644 --- a/examples/post_file_test.go +++ b/examples/post_file_test.go @@ -4,7 +4,7 @@ import ( "path/filepath" "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) /* diff --git a/examples/post_test.go b/examples/post_test.go index f6e99db9..53cb4124 100644 --- a/examples/post_test.go +++ b/examples/post_test.go @@ -7,7 +7,7 @@ import ( "strings" "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) // Post Params: use with content-type: none diff --git a/examples/req_header_test.go b/examples/req_header_test.go index 958cdef2..50378102 100644 --- a/examples/req_header_test.go +++ b/examples/req_header_test.go @@ -3,7 +3,7 @@ package examples import ( "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) // Send headers diff --git a/examples/response_build_test.go b/examples/response_build_test.go index bdfffaa0..720ee316 100644 --- a/examples/response_build_test.go +++ b/examples/response_build_test.go @@ -7,7 +7,7 @@ import ( "net/http/httptest" "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) func TestResponseBuilder(t *testing.T) { diff --git a/examples/response_test.go b/examples/response_test.go index c8b844cf..283ff966 100644 --- a/examples/response_test.go +++ b/examples/response_test.go @@ -4,7 +4,7 @@ import ( "fmt" "testing" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) // Test Response diff --git a/examples/retry_test.go b/examples/retry_test.go index d5980e7d..94ed75f2 100644 --- a/examples/retry_test.go +++ b/examples/retry_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) func TestRetryCondition(t *testing.T) { diff --git a/examples/server_test.go b/examples/server_test.go index 98cc7db7..d0f188f5 100644 --- a/examples/server_test.go +++ b/examples/server_test.go @@ -236,7 +236,7 @@ func createTestServer(fn func(w http.ResponseWriter, r *http.Request), tlsCert i // 3. use own cert if tlsCert == 2 { - cert, err := tls.LoadX509KeyPair("./conf/nginx.crt", "./conf/nginx.key") + cert, err := tls.LoadX509KeyPair("../conf/nginx.crt", "../conf/nginx.key") if err != nil { panic(err) } diff --git a/example1/ssl_test.go b/examples/ssl_test.go similarity index 73% rename from example1/ssl_test.go rename to examples/ssl_test.go index 8a86dc1a..6b46ffd7 100644 --- a/example1/ssl_test.go +++ b/examples/ssl_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - "github.com/ahuigo/requests/v2" + "github.com/go-resty/resty/v3" ) func TestSkipSsl(t *testing.T) { @@ -17,21 +17,21 @@ func TestSkipSsl(t *testing.T) { ts := createHttpbinServer(2) defer ts.Close() - session := requests.R() + client := resty.New() // 2. fake CA certificate - // session.SetCaCert("conf/rootCA.crt") + // client.SetRootCertificate("conf/rootCA.crt") // 3. skip ssl - session = session.SkipSsl(true) + client = client.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true}) // 4. send get request - resp, err := session.Get(ts.URL + "/get?a=1") + resp, err := client.R().Get(ts.URL + "/get?a=1") if err != nil { t.Fatal(err) } - if resp.Text() == "" { - t.Fatal(resp.Text()) + if string(resp.Body()) == "" { + t.Fatal(string(resp.Body())) } } @@ -40,10 +40,10 @@ func TestSslSkipViaTransport(t *testing.T) { ts := createHttpbinServer(2) defer ts.Close() - session := requests.R() + client := resty.New() // 3. skip ssl & proxy connect - tsp := session.GetTransport() + tsp,_ := client.Transport() _ = tsp tsp.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { // not connect to a proxy server,, keep pathname only @@ -54,12 +54,12 @@ func TestSslSkipViaTransport(t *testing.T) { } // 4. send get request - resp, err := session.Get(ts.URL + "/get?a=1") + resp, err := client.R().Get(ts.URL + "/get?a=1") if err != nil { t.Fatal(err) } - if resp.Text() == "" { - t.Fatal(resp.Text()) + if string(resp.Body()) == "" { + t.Fatal(string(resp.Body())) } } @@ -68,7 +68,7 @@ func TestSslCertSelf(t *testing.T) { ts := createHttpbinServer(1) defer ts.Close() - session := requests.R() + client := resty.New() // 2. certs certs := x509.NewCertPool() for _, c := range ts.TLS.Certificates { @@ -81,9 +81,9 @@ func TestSslCertSelf(t *testing.T) { } } - // 3. 代替 session.SetCaCert("tmp/ca.crt") + // 3. 代替 client.SetRootCertificate("tmp/ca.crt") // 3. with RootCAs & proxy connect - tsp := session.GetTransport() + tsp,_ := client.Transport() tsp.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { // not connect to a proxy server,, keep pathname only return net.Dial("tcp", ts.URL[strings.LastIndex(ts.URL, "/")+1:]) @@ -94,12 +94,12 @@ func TestSslCertSelf(t *testing.T) { } // 4. send get request - resp, err := session.Get(ts.URL + "/get?a=1") + resp, err := client.R().Get(ts.URL + "/get?a=1") if err != nil { t.Fatal(err) } - if resp.Text() == "" { - t.Fatal(resp.Text()) + if string(resp.Body()) == "" { + t.Fatal(string(resp.Body())) } } @@ -109,11 +109,12 @@ func TesSslCertCustom(t *testing.T) { ts := createHttpbinServer(2) defer ts.Close() - session := requests.R() + client := resty.New() + // 2. fake CA or self-signed certificate like nginx.crt - session.SetCaCert("conf/nginx.crt") - tsp := session.GetTransport() + client.SetRootCertificate("../conf/nginx.crt") + tsp,_ := client.Transport() tsp.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { // not connect to a proxy server,, keep pathname only return net.Dial("tcp", ts.URL[strings.LastIndex(ts.URL, "/")+1:]) @@ -123,11 +124,11 @@ func TesSslCertCustom(t *testing.T) { t.Log(url) // time.Sleep(10 * time.Minute) // 4. send get request - resp, err := session.Get(url) + resp, err := client.R().Get(url) if err != nil { t.Fatal(err) } - if resp.Text() == "" { - t.Fatal(resp.Text()) + if string(resp.Body()) == "" { + t.Fatal(string(resp.Body())) } } diff --git a/examples/timeout_test.go b/examples/timeout_test.go index c36f46fd..c600a793 100644 --- a/examples/timeout_test.go +++ b/examples/timeout_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/go-resty/resty/v2" + "github.com/go-resty/resty/v3" ) func TestTimeout(t *testing.T) { diff --git a/example1/transport_test.go b/examples/transport_test.go similarity index 71% rename from example1/transport_test.go rename to examples/transport_test.go index ce206f1c..e6517e3d 100644 --- a/example1/transport_test.go +++ b/examples/transport_test.go @@ -7,14 +7,15 @@ import ( "net/http" "testing" - "github.com/ahuigo/requests/v2" + "github.com/go-resty/resty/v3" ) func TestTransportSet(t *testing.T) { ts := createHttpbinServer(0) defer ts.Close() - session := requests.R() + session := resty.New() + // tsp:= otelhttp.NewTransport(http.DefaultTransport) tsp := http.DefaultTransport.(*http.Transport).Clone() tsp.MaxIdleConnsPerHost = 1 @@ -22,11 +23,12 @@ func TestTransportSet(t *testing.T) { tsp.MaxConnsPerHost = 1 session.SetTransport(tsp) - resp, err := session.Get(ts.URL + "/sleep/11") + resp, err := session.R().Get(ts.URL + "/sleep/11") if err != nil { t.Fatal(err) } - if resp.Text() == "" { - t.Fatal(resp.Text()) + body := string(resp.Body()) + if body== "" { + t.Fatal("emptay body") } } diff --git a/request.go b/request.go index 168832bd..59b8c11b 100644 --- a/request.go +++ b/request.go @@ -82,6 +82,9 @@ func (r *Request) EnableCurl() *Request{ func (r *Request) GetCurlCmd() string{ if r.curlCmd == ""{ + if r.RawRequest == nil{ + r.Get("/") + } r.curlCmd = BuildCurlRequest(r.RawRequest, r.client.httpClient.Jar) } return r.curlCmd diff --git a/response.go b/response.go index 5fda2571..8025f26b 100644 --- a/response.go +++ b/response.go @@ -103,13 +103,13 @@ func (r *Response) Cookies() []*http.Cookie { return r.RawResponse.Cookies() } -func (r *Response) GetCookie(key string) (val string) { - cookies := map[string]string{} +func (r *Response) GetCookie(key string) (string) { for _, c := range r.Cookies() { - cookies[c.Name] = c.Value + if c.Name==key{ + return c.Value + } } - val = cookies[key] - return val + return "" } // String method returns the body of the server response as String. diff --git a/util_curl.go b/util_curl.go index aa724e48..48cd2330 100644 --- a/util_curl.go +++ b/util_curl.go @@ -2,14 +2,14 @@ package resty import ( "bytes" - "io/ioutil" + "io" "net/http" "net/http/cookiejar" "net/url" "strings" - "github.com/go-resty/resty/v2/shellescape" + "github.com/go-resty/resty/v3/shellescape" ) func BuildCurlRequest(req *http.Request, httpCookiejar http.CookieJar) (curl string) { @@ -32,8 +32,8 @@ func BuildCurlRequest(req *http.Request, httpCookiejar http.CookieJar) (curl str // body if req.Body != nil { - buf, _ := ioutil.ReadAll(req.Body) - req.Body = ioutil.NopCloser(bytes.NewBuffer(buf)) // important!! + buf, _ := io.ReadAll(req.Body) + req.Body = io.NopCloser(bytes.NewBuffer(buf)) // important!! curl += `-d ` + shellescape.Quote(string(buf)) }