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 }