daily_3dos.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package main
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "strings"
  8. "sync"
  9. )
  10. type LoginResponse struct {
  11. Data struct {
  12. AccessToken string `json:"access_token"`
  13. TokenType string `json:"token_type"`
  14. Token string `json:"token"`
  15. } `json:"data"`
  16. }
  17. type ClaimResponse struct {
  18. Message string `json:"message"`
  19. }
  20. func dailyClaim3DOS(email, password string) string {
  21. client := &http.Client{}
  22. loginURL := "https://api.dashboard.3dos.io/api/auth/login"
  23. loginPayload := map[string]string{
  24. "email": email,
  25. "password": password,
  26. }
  27. loginPayloadJSON, _ := json.Marshal(loginPayload)
  28. loginReq, _ := http.NewRequest("POST", loginURL, bytes.NewBuffer(loginPayloadJSON))
  29. loginReq.Header.Set("Accept", "application/json, text/plain, */*")
  30. loginReq.Header.Set("Accept-Encoding", "gzip, deflate, br, zstd")
  31. loginReq.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
  32. loginReq.Header.Set("Content-Type", "application/json")
  33. loginReq.Header.Set("Origin", "https://dashboard.3dos.io")
  34. loginReq.Header.Set("Priority", "u=1, i")
  35. loginReq.Header.Set("Referer", "https://dashboard.3dos.io/")
  36. loginReq.Header.Set("Sec-CH-UA", `"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"`)
  37. loginReq.Header.Set("Sec-CH-UA-Mobile", "?0")
  38. loginReq.Header.Set("Sec-CH-UA-Platform", `"Windows"`)
  39. loginReq.Header.Set("Sec-Fetch-Dest", "empty")
  40. loginReq.Header.Set("Sec-Fetch-Mode", "cors")
  41. loginReq.Header.Set("Sec-Fetch-Site", "same-site")
  42. loginReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36")
  43. loginResp, err := client.Do(loginReq)
  44. if err != nil {
  45. return fmt.Sprintf("%s: 登录请求失败", email)
  46. }
  47. defer loginResp.Body.Close()
  48. if loginResp.StatusCode != 200 {
  49. return fmt.Sprintf("%s: 登录失败", email)
  50. }
  51. var loginData LoginResponse
  52. json.NewDecoder(loginResp.Body).Decode(&loginData)
  53. token := loginData.Data.AccessToken
  54. if token == "" {
  55. token = loginData.Data.Token
  56. }
  57. tokenType := loginData.Data.TokenType
  58. if token == "" || tokenType == "" {
  59. return fmt.Sprintf("%s: 登录响应中未找到 Token 或 Token 类型", email)
  60. }
  61. authorizationHeader := fmt.Sprintf("%s %s", tokenType, token)
  62. optionsURL := "https://api.dashboard.3dos.io/api/claim-reward"
  63. optionsReq, _ := http.NewRequest("OPTIONS", optionsURL, nil)
  64. optionsReq.Header.Set("Accept", "*/*")
  65. optionsReq.Header.Set("Accept-Encoding", "gzip, deflate, br, zstd")
  66. optionsReq.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
  67. optionsReq.Header.Set("Access-Control-Request-Headers", "authorization,cache-control,content-type,expires,pragma")
  68. optionsReq.Header.Set("Access-Control-Request-Method", "POST")
  69. optionsReq.Header.Set("Origin", "https://dashboard.3dos.io")
  70. optionsReq.Header.Set("Priority", "u=1, i")
  71. optionsReq.Header.Set("Referer", "https://dashboard.3dos.io/")
  72. optionsReq.Header.Set("Sec-Fetch-Dest", "empty")
  73. optionsReq.Header.Set("Sec-Fetch-Mode", "cors")
  74. optionsReq.Header.Set("Sec-Fetch-Site", "same-site")
  75. optionsReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36")
  76. optionsResp, err := client.Do(optionsReq)
  77. if err != nil {
  78. return fmt.Sprintf("%s: OPTIONS 请求失败", email)
  79. }
  80. defer optionsResp.Body.Close()
  81. claimURL := "https://api.dashboard.3dos.io/api/claim-reward"
  82. claimPayload := map[string]string{
  83. "id": "daily-reward-api",
  84. }
  85. claimPayloadJSON, _ := json.Marshal(claimPayload)
  86. claimReq, _ := http.NewRequest("POST", claimURL, bytes.NewBuffer(claimPayloadJSON))
  87. claimReq.Header.Set("Accept", "application/json, text/plain, */*")
  88. claimReq.Header.Set("Authorization", authorizationHeader)
  89. claimReq.Header.Set("Cache-Control", "no-cache")
  90. claimReq.Header.Set("Content-Type", "application/json")
  91. claimReq.Header.Set("Expires", "0")
  92. claimReq.Header.Set("Origin", "https://dashboard.3dos.io")
  93. claimReq.Header.Set("Pragma", "no-cache")
  94. claimReq.Header.Set("Priority", "u=1, i")
  95. claimReq.Header.Set("Referer", "https://dashboard.3dos.io/")
  96. claimReq.Header.Set("Sec-CH-UA", `"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"`)
  97. claimReq.Header.Set("Sec-CH-UA-Mobile", "?0")
  98. claimReq.Header.Set("Sec-CH-UA-Platform", `"Windows"`)
  99. claimReq.Header.Set("Sec-Fetch-Dest", "empty")
  100. claimReq.Header.Set("Sec-Fetch-Mode", "cors")
  101. claimReq.Header.Set("Sec-Fetch-Site", "same-site")
  102. claimReq.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36")
  103. claimResp, err := client.Do(claimReq)
  104. if err != nil {
  105. return fmt.Sprintf("%s: claim-reward 请求失败", email)
  106. }
  107. defer claimResp.Body.Close()
  108. var claimData ClaimResponse
  109. json.NewDecoder(claimResp.Body).Decode(&claimData)
  110. if claimResp.StatusCode != 200 && claimResp.StatusCode != 429 {
  111. return fmt.Sprintf("%s: claim 报错: %s, 状态码%d", email, claimData.Message, claimResp.StatusCode)
  112. }
  113. return fmt.Sprintf("%s: %s", email, claimData.Message)
  114. }
  115. func main() {
  116. fmt.Println("开始执行...")
  117. accountList := []string{
  118. "jack0210_@hotmail.com|||aaaAAA111!!!",
  119. "yujieccyj01@hotmail.com|||aaaAAA111!!!",
  120. "yujieccyj02@hotmail.com|||aaaAAA111!!!",
  121. "yujieccyj03@hotmail.com|||aaaAAA111!!!",
  122. "yujieccyj04@hotmail.com|||aaaAAA111!!!",
  123. "yujieccyj05@hotmail.com|||aaaaAA111!!!",
  124. "yujieccyj06@hotmail.com|||aaaAAA111!!!",
  125. "yujieccyj07@hotmail.com|||aaaAAA111!!!",
  126. "yujieccyj08@hotmail.com|||aaaAAA111!!!",
  127. "yujieccyj09@hotmail.com|||aaaAAA111!!!",
  128. "yujieccyj10@hotmail.com|||aaaAAA111!!!",
  129. }
  130. var wg sync.WaitGroup
  131. results := make(chan string, len(accountList))
  132. for _, account := range accountList {
  133. if account == "" {
  134. continue
  135. }
  136. wg.Add(1)
  137. go func(acc string) {
  138. defer wg.Done()
  139. email, password := strings.Split(acc, "|||")[0], strings.Split(acc, "|||")[1]
  140. results <- dailyClaim3DOS(email, password)
  141. }(account)
  142. }
  143. wg.Wait()
  144. close(results)
  145. for result := range results {
  146. fmt.Println(result)
  147. }
  148. }