package main import ( "bufio" "fmt" "strings" "time" "tinygo.org/x/drivers/net" "tinygo.org/x/drivers/net/http" "tinygo.org/x/drivers/rtl8720dn" ) // You can override the setting with the init() in another source code. // func init() { // ssid = "your-ssid" // password = "your-password" // debug = true // url = "https://www.example.com" // test_root_ca = "..." // } var ( ssid string password string url string = "https://www.example.com" debug = false ) // Set the test_root_ca created by the following command // $ openssl s_client -showcerts -verify 5 -connect www.example.com:443 < /dev/null var test_root_ca = `-----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg 06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- ` var buf [0x1000]byte var lastRequestTime time.Time var conn net.Conn var adaptor *rtl8720dn.RTL8720DN func main() { err := run() for err != nil { fmt.Printf("error: %s\r\n", err.Error()) time.Sleep(5 * time.Second) } } func run() error { rtl, err := setupRTL8720DN() if err != nil { return err } rtl.SetRootCA(&test_root_ca) net.UseDriver(rtl) http.SetBuf(buf[:]) err = rtl.ConnectToAP(ssid, password) if err != nil { return err } ip, subnet, gateway, err := rtl.GetIP() if err != nil { return err } fmt.Printf("IP Address : %s\r\n", ip) fmt.Printf("Mask : %s\r\n", subnet) fmt.Printf("Gateway : %s\r\n", gateway) // You can send and receive cookies in the following way // import "tinygo.org/x/drivers/net/http/cookiejar" // jar, err := cookiejar.New(nil) // if err != nil { // return err // } // client := &http.Client{Jar: jar} // http.DefaultClient = client cnt := 0 for { // Various examples are as follows // // -- Get // resp, err := http.Get(url) // // -- Post // body := `cnt=12` // resp, err = http.Post(url, "application/x-www-form-urlencoded", strings.NewReader(body)) // // -- Post with JSON // body := `{"msg": "hello"}` // resp, err := http.Post(url, "application/json", strings.NewReader(body)) resp, err := http.Get(url) if err != nil { return err } fmt.Printf("%s %s\r\n", resp.Proto, resp.Status) for k, v := range resp.Header { fmt.Printf("%s: %s\r\n", k, strings.Join(v, " ")) } fmt.Printf("\r\n") scanner := bufio.NewScanner(resp.Body) for scanner.Scan() { fmt.Printf("%s\r\n", scanner.Text()) } resp.Body.Close() cnt++ fmt.Printf("-------- %d --------\r\n", cnt) time.Sleep(10 * time.Second) } }