201 lines
4.3 KiB
Go
201 lines
4.3 KiB
Go
|
|
package starnet_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"net/http"
|
||
|
|
"net/http/httptest"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"b612.me/starnet"
|
||
|
|
)
|
||
|
|
|
||
|
|
func ExampleGet() {
|
||
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
w.Write([]byte("Hello, World!"))
|
||
|
|
}))
|
||
|
|
defer server.Close()
|
||
|
|
|
||
|
|
resp, err := starnet.Get(server.URL)
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
defer resp.Close()
|
||
|
|
|
||
|
|
body, _ := resp.Body().String()
|
||
|
|
fmt.Println(body)
|
||
|
|
// Output: Hello, World!
|
||
|
|
}
|
||
|
|
|
||
|
|
func ExamplePost() {
|
||
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
w.Write([]byte("Posted"))
|
||
|
|
}))
|
||
|
|
defer server.Close()
|
||
|
|
|
||
|
|
resp, err := starnet.Post(server.URL,
|
||
|
|
starnet.WithBodyString("test data"))
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
defer resp.Close()
|
||
|
|
|
||
|
|
body, _ := resp.Body().String()
|
||
|
|
fmt.Println(body)
|
||
|
|
// Output: Posted
|
||
|
|
}
|
||
|
|
|
||
|
|
func ExampleNewSimpleRequest() {
|
||
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
w.Write([]byte("OK"))
|
||
|
|
}))
|
||
|
|
defer server.Close()
|
||
|
|
|
||
|
|
req := starnet.NewSimpleRequest(server.URL, "GET").
|
||
|
|
SetHeader("X-Custom", "value").
|
||
|
|
AddQuery("name", "test")
|
||
|
|
|
||
|
|
resp, err := req.Do()
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
defer resp.Close()
|
||
|
|
|
||
|
|
fmt.Println(resp.StatusCode)
|
||
|
|
// Output: 200
|
||
|
|
}
|
||
|
|
|
||
|
|
func ExampleClient_Get() {
|
||
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
w.Write([]byte("Client GET"))
|
||
|
|
}))
|
||
|
|
defer server.Close()
|
||
|
|
|
||
|
|
client := starnet.NewClientNoErr(
|
||
|
|
starnet.WithTimeout(10*time.Second),
|
||
|
|
starnet.WithUserAgent("MyApp/1.0"),
|
||
|
|
)
|
||
|
|
|
||
|
|
resp, err := client.Get(server.URL)
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
defer resp.Close()
|
||
|
|
|
||
|
|
body, _ := resp.Body().String()
|
||
|
|
fmt.Println(body)
|
||
|
|
// Output: Client GET
|
||
|
|
}
|
||
|
|
|
||
|
|
func ExampleRequest_SetJSON() {
|
||
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
w.Header().Set("Content-Type", "application/json")
|
||
|
|
w.Write([]byte(`{"status":"ok"}`))
|
||
|
|
}))
|
||
|
|
defer server.Close()
|
||
|
|
|
||
|
|
type User struct {
|
||
|
|
Name string `json:"name"`
|
||
|
|
Email string `json:"email"`
|
||
|
|
}
|
||
|
|
|
||
|
|
user := User{Name: "John", Email: "john@example.com"}
|
||
|
|
|
||
|
|
resp, err := starnet.NewSimpleRequest(server.URL, "POST").
|
||
|
|
SetJSON(user).
|
||
|
|
Do()
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
defer resp.Close()
|
||
|
|
|
||
|
|
var result map[string]string
|
||
|
|
resp.Body().JSON(&result)
|
||
|
|
fmt.Println(result["status"])
|
||
|
|
// Output: ok
|
||
|
|
}
|
||
|
|
|
||
|
|
func ExampleRequest_AddFormData() {
|
||
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
r.ParseForm()
|
||
|
|
fmt.Fprintf(w, "name=%s", r.FormValue("name"))
|
||
|
|
}))
|
||
|
|
defer server.Close()
|
||
|
|
|
||
|
|
resp, err := starnet.NewSimpleRequest(server.URL, "POST").
|
||
|
|
AddFormData("name", "John").
|
||
|
|
AddFormData("age", "30").
|
||
|
|
Do()
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
defer resp.Close()
|
||
|
|
|
||
|
|
body, _ := resp.Body().String()
|
||
|
|
fmt.Println(body)
|
||
|
|
// Output: name=John
|
||
|
|
}
|
||
|
|
|
||
|
|
func ExampleRequest_SetSkipTLSVerify() {
|
||
|
|
// This example shows how to skip TLS verification
|
||
|
|
// Useful for testing with self-signed certificates
|
||
|
|
|
||
|
|
req := starnet.NewSimpleRequest("https://self-signed.example.com", "GET").
|
||
|
|
SetSkipTLSVerify(true)
|
||
|
|
|
||
|
|
// In a real scenario, you would call req.Do()
|
||
|
|
fmt.Println(req.Method())
|
||
|
|
// Output: GET
|
||
|
|
}
|
||
|
|
|
||
|
|
func ExampleRequest_Clone() {
|
||
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
w.Write([]byte("OK"))
|
||
|
|
}))
|
||
|
|
defer server.Close()
|
||
|
|
|
||
|
|
baseReq := starnet.NewSimpleRequest(server.URL, "GET").
|
||
|
|
SetHeader("X-API-Key", "secret")
|
||
|
|
|
||
|
|
// Clone and modify
|
||
|
|
req1 := baseReq.Clone().AddQuery("page", "1")
|
||
|
|
req2 := baseReq.Clone().AddQuery("page", "2")
|
||
|
|
|
||
|
|
resp1, _ := req1.Do()
|
||
|
|
resp2, _ := req2.Do()
|
||
|
|
|
||
|
|
defer resp1.Close()
|
||
|
|
defer resp2.Close()
|
||
|
|
|
||
|
|
fmt.Println(resp1.StatusCode, resp2.StatusCode)
|
||
|
|
// Output: 200 200
|
||
|
|
}
|
||
|
|
|
||
|
|
func ExampleClient_SetDefaultSkipTLSVerify() {
|
||
|
|
client := starnet.NewClientNoErr()
|
||
|
|
client.SetDefaultSkipTLSVerify(true)
|
||
|
|
|
||
|
|
// All requests from this client will skip TLS verification
|
||
|
|
// unless overridden at request level
|
||
|
|
|
||
|
|
fmt.Println("Client configured")
|
||
|
|
// Output: Client configured
|
||
|
|
}
|
||
|
|
|
||
|
|
func ExampleWithTimeout() {
|
||
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
|
time.Sleep(100 * time.Millisecond)
|
||
|
|
w.Write([]byte("OK"))
|
||
|
|
}))
|
||
|
|
defer server.Close()
|
||
|
|
|
||
|
|
resp, err := starnet.Get(server.URL,
|
||
|
|
starnet.WithTimeout(200*time.Millisecond))
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
defer resp.Close()
|
||
|
|
|
||
|
|
fmt.Println(resp.StatusCode)
|
||
|
|
// Output: 200
|
||
|
|
}
|