全球主机交流论坛

用户名  找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 885|回复: 2

好吧 golang 腾讯云函数 论坛签到

[复制链接]
发表于 2021-5-25 23:42:41 | 显示全部楼层 |阅读模式
触发器我自己还没测试过
只是程序测试的话 这里有张图

这里说一下触发器的创建

json在这里说明一下:
用户信息添加到users里
access_times是访问空间的次数
interval是发送请求的时间间隔, 单位是秒
  1. {
  2.   "users": [
  3.     {"username": "yjsx86", "password": "xxxxxxxxxxx"},
  4.     {"username": "yjsx87", "password": "test"}
  5.   ],
  6.   "access_times": 2,
  7.   "interval": 3
  8. }
复制代码


编译好的文件在这里:https://urair.lanzoui.com/i1Zh7pgxksh

怕文件有鬼的源码在这里(自己编译再上传):
  1. package main

  2. import (
  3.         "errors"
  4.         "fmt"
  5.         "github.com/tencentyun/scf-go-lib/cloudfunction"
  6.         "io"
  7.         "io/ioutil"
  8.         "log"
  9.         "math/rand"
  10.         "net/http"
  11.         "net/http/cookiejar"
  12.         "net/url"
  13.         "regexp"
  14.         "strings"
  15.         "time"
  16. )

  17. var client = NewClient()
  18. var AccessTimes int
  19. var InterVal int

  20. func main() {
  21.         cloudfunction.Start(start)
  22. }

  23. func NewClient() *http.Client {
  24.         j, _ := cookiejar.New(nil)

  25.         //proxyurl, _ := url.Parse("http://127.0.0.1:1080")
  26.         //proxy := http.ProxyURL(proxyurl)
  27.         //transport := &http.Transport{Proxy: proxy}

  28.         cli := &http.Client{
  29.                 //Transport: transport,
  30.                 Jar: j,
  31.         }
  32.         return cli
  33. }

  34. // start 程序入口
  35. func start(event DefineEvent)  {
  36.         AccessTimes = event.AccessTimes
  37.         InterVal = event.Interval
  38.         users := event.Users
  39.         for _, user := range users {
  40.                 u := user
  41.                 HostlocSign(u)
  42.         }
  43. }

  44. // HostlocSign 程序主体
  45. func HostlocSign(u User) {

  46.         isLogin, err := u.Login()
  47.         if err != nil {
  48.                 log.Println(err)
  49.                 return
  50.         }

  51.         if isLogin {
  52.                 log.Printf("user %s: Login Success\n", u.Username)
  53.                 u.AccessRandomSpace()
  54.         }

  55.         fmt.Println("Done")
  56.         u.Logout()
  57. }

  58. // DefineEvent 定义消息事件结构体
  59. type DefineEvent struct {
  60.         Users []User `json:"users"`
  61.         AccessTimes int `json:"access_times"`
  62.         Interval int `json:"interval"`
  63. }

  64. // User 定义用户结构体
  65. type User struct {
  66.         Username string `json:"username"`
  67.         Password string        `json:"password"`
  68. }

  69. // Login 登陆方法
  70. func (u *User) Login() (bool, error) {
  71.         api := "https://hostloc.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1"
  72.         data := make(url.Values)
  73.         data.Add("fastloginfield", "username")
  74.         data.Add("username", u.Username)
  75.         data.Add("password", u.Password)
  76.         data.Add("quickforward", "yes")
  77.         data.Add("handlekey", "ls")
  78.         req, _ := http.NewRequest("POST", api, strings.NewReader(data.Encode()))
  79.         req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.3")
  80.         req.Header.Set("content-type", "application/x-www-form-urlencoded")
  81.         resp, err := client.Do(req)
  82.         if err != nil {
  83.                 return false, err
  84.         }
  85.         body, _ := io.ReadAll(resp.Body)
  86.         if isContains := strings.Contains(string(body), "https://hostloc.com/./"); isContains {
  87.                 return true, nil
  88.         } else {
  89.                 return false, errors.New(fmt.Sprintf("user %s: username or password error\n", u.Username))
  90.         }

  91. }

  92. // Logout 用户退出
  93. func (u *User) Logout() {
  94.         j, _ := cookiejar.New(nil)
  95.         client.Jar = j
  96. }

  97. // AccessRandomSpace 访问随机用户空间
  98. func (u *User) AccessRandomSpace() {
  99.         rand.Seed(time.Now().UnixNano())
  100.         var count int
  101.         var failCount int
  102.         //循环访问空间
  103.         for count < AccessTimes {
  104.                 if failCount > 3 {
  105.                         log.Fatal("Failed more than 3 times, There was an error in the program or network!exit")
  106.                 }
  107.                 spaceUrl := fmt.Sprintf("https://hostloc.com/space-uid-%d.html", rand.Intn(53484))
  108.                 fmt.Printf("Visit: %s ", spaceUrl)
  109.                 req, _ := http.NewRequest("GET", spaceUrl, nil)
  110.                 req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.3")
  111.                 resp, err := client.Do(req)
  112.                 if err != nil {
  113.                         fmt.Printf("False:%s\n", err)
  114.                         failCount++
  115.                         time.Sleep(time.Duration(InterVal) * time.Second)
  116.                         continue
  117.                 }
  118.                 body, err := ioutil.ReadAll(resp.Body)

  119.                 //获取title
  120.                 r, _ := rege**pile("<title>(.*?)</title>")
  121.                 title := r.FindStringSubmatch(string(body))[1]

  122.                 //判断title是否以:XXX的空间 XXX的个人资料 开头
  123.                 ismatched1, _ := regexp.MatchString("^.*?的空间", title)
  124.                 ismatched2, _ := regexp.MatchString("^.*?的个人资料", title)

  125.                 if ismatched1 || ismatched2 {
  126.                         fmt.Println("True")
  127.                         count++
  128.                 } else {
  129.                         fmt.Println("False")
  130.                 }
  131.                 time.Sleep(time.Duration(InterVal) * time.Second)
  132.         }
  133. }

复制代码

发表于 2021-5-25 23:50:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2021-5-25 23:44:18 | 显示全部楼层
还是在自己小鸡上签,省事。不然吃灰也没用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-3-14 08:45 , Processed in 0.063150 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表