草庐IT

stream抓包+推送phone实战

我是等闲之辈 2023-07-20 原文

最近需要办理某个业务,发现天河区的余号一直为0。突然想到前阵子看过一篇文章,作者在叮咚上一直抢不到菜。通过抓包获取小程序的接口请求数据,然后定时去调用这个接口,判断有菜就自动发推送到手机。于是,周五晚上我也捣鼓了几个小时。发现也可以实现这种半自动化的功能。

下载安装抓包工具

首先,需要通过抓包工具获取小程序的api接口请求数据
我用的是抓包工具是手机app:stream。(在appstore直接下载)
默认安装后是无法抓取 https 类型的,需要在设置里进行相关配置:

如果您要抓取 HTTPS 的请求,需要先启动抓包,然后安装 CA 证书后。
*去设置-通用-关于-证书信任设置 里信任 CA,才可以查看请求的内容。

总之要点击进去“https抓包”,根据提示开启证书信任。

开始抓包

一切设置好后,即可点击“开始抓包”。
然后就是去点击小程序,访问接口。接口访问成功后,停止抓包。顺便把证书信任关闭,不然觉得心慌慌的。
从抓到的包中找到对应的api,然后点击"获取cURL命令"。把请求数据全部复制通过postman的import命令导入,即可在postman请求。



postman的另一个利器,就是能生成各个语言的curl请求。我这里生成go请求:

手机推送

接下来就是要推送。这个我使用的是苹果手机app:Bark。Bark是一个开发者的专属推送工具,免费、稳定,在 appleStore 中下载 。
步骤很简单。就是bark会自动提供一个url给你,通过get请求调用一下这个url即可推送到i你的手机。

最后就是在服务器定时执行这个脚本即可。建议不要太频繁,而且提示有余号后,就退出这个程序(利用go的log.Fatalf)。不然一直推送到你手机,很烦。

参考代码

package main

import (
    "fmt"
    "go_card/card"
    "log"
    "time"
)

func main() {
    //周期性定时器(Ticker)
    //每隔n分钟执行一次。第一次执行就要等待n分钟。有毒。
    ticker := time.NewTicker(5 * time.Minute)
    defer ticker.Stop()

    for range ticker.C {
        doSelect()
    }
}

func doSelect() {
    //调用获取广州各区的预约余额
    num, err := card.SelectAreaCount()
    //约定-10086是错误码
    if err != nil {
        log.Fatalf("请求接口失败:%v\n", err)
    }
    log.Printf("本次请求获取到的天河区预约余额数量:%d\n", num)

    if num > 0 {
        s := fmt.Sprintf("有余号有%d个,赶紧去抢!", num)
        log.Println(s)
        url := "https://你的Bark专属url/" + s
        //发送推送
        err := card.SendToPhone(url)
        if err != nil {
            log.Fatalf("发送短信失败:%v\n", err)
        }
        //这里Fatalf会调用os.Exit(1)使整个程序停止.即退出定时器
        log.Fatalf("发送短信通知成功:%v,共有余号:%d\n", err, num)
    }
}

package card

import (
    "encoding/json"
    "errors"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

const err_code = -10086

func SelectAreaCount() (int, error) {

    url := "小程序api"
    method := "GET"

    client := &http.Client{}
    req, err := http.NewRequest(method, url, nil)

    if err != nil {
        return err_code, err
    }
 	//为了隐私,这里省略一堆的header头部
    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("Accept-Encoding", "gzip, deflate, br")

    res, err := client.Do(req)
    if err != nil {
        return err_code, err
    }
    defer res.Body.Close()

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        return err_code, err
    }
    type AreaData struct {
        Code  int
        Count map[string]int
    }

    var areaData AreaData
    err = json.Unmarshal(body, &areaData)
    if err != nil {
        return err_code, err
    }
    //记录获取到的数据到日志(输出到日志,带有日期格式)
    log.Printf("本次请求获取到的广州各区的预约余额:%v\n", areaData)

    if areaData.Code != 200 {
        return err_code, err
    }

    v, ok := areaData.Count["天河区"]
    if !ok {
        return err_code, errors.New("不存在天河区")
    }
    return v, nil
}

func SendToPhone(url string) error {
    method := "GET"
    client := &http.Client{}
    req, err := http.NewRequest(method, url, nil)
    res, err := client.Do(req)
    if err != nil {
        return err
    }
    defer res.Body.Close()

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        return err
    }
    fmt.Println(string(body))
    return nil
}

有关stream抓包+推送phone实战的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  3. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  4. ruby - gem 推送结果为 "package metadata is missing" - 2

    我正在尝试将我更新的gem推送到ruby​​gems.com并得到以下结果。~/dev/V2/V2GPTI(master)$gembuildv2gpti.gemspecSuccessfullybuiltRubyGemName:v2gptiVersion:0.2File:v2gpti-0.2-universal-darwin-13.gem~/dev/V2/V2GPTI(master)$gempushv2gpti.gemspecERROR:Whileexecutinggem...(Gem::Package::FormatError)packagemetadataismissinginv2g

  5. ruby - 从 Ruby 连接到适用于 Windows Phone 8 的 Microsoft 推送通知服务 - 2

    我们正在开发一个需要推送通知的WP8应用程序。为了测试它,我们使用CURL命令行运行推送通知POST请求,确保它实际连接,使用客户端SSL证书进行身份验证并发送正确的数据。我们确实知道,当我们收到对设备的推送时,这项工作是有效的。这是我们一直用于测试目的的CURL命令:curl--certclient_cert.pem-v-H"Content-Type:text/xml"-H"X-WindowsPhone-Target:Toast"-H"X-NotificationClass:2"-XPOST-d"MytitleMysubtitle"https://db3.notify.live.ne

  6. ruby-on-rails - 如何让 ActionController::Live streaming 与 Thin 一起工作? - 2

    问题你能用thin吗?与ActionController::Live实现服务器端事件(SSE)和长轮询?如果是,怎么办?上下文虽然标题是HowtogetRails4ActionController::LivestreamingworkingwithThinandRuby2?AndhowdoThinandPumascalewithlivestreaming?的重复,OP通过问两个问题混淆了水域,这个问题从未得到回答。许多其他帖子建议您可以使用thin对于服务器端事件(sse),如果您通过execthinstart--threaded启动它:DoesHerokusupportActionC

  7. ruby - 如何在特定队列中推送作业并使用 sidekiq 限制工作人员数量? - 2

    我知道我们可以做到:sidekiq_optionsqueue:"Foo"但在这种情况下,Worker只分配给一个队列:“Foo”。我需要在特定队列中分配作业(而不是worker)。使用Resque很容易:Resque.enqueue_to(queue_name,my_job)另外,为了并发问题,我需要限制每个队列的Worker数量为1。我该怎么做? 最佳答案 您可能会使用https://github.com/brainopia/sidekiq-limit_fetch然后:Sidekiq::Client.push({'class'=>

  8. 你真正了解什么是接口测试么?接口实战一“篇”入魂 - 2

    最近在工作中,看到一些新手测试同学,对接口测试存在很多疑问,甚至包括一些从事软件测试3,5年的同学,在聊到接口时,也是一知半解;今天借着这个机会,对接口测试做个实战教学,顺便总结一下经验,分享给大家。计划拆分成4个模块跟大家做一个分享,(接口测试、接口基础知识、接口自动化、接口进阶)感兴趣的小伙伴记得关注,希望对你的日常工作和求职面试,带来一些帮助。注:文章较长有5000多字,希望小伙伴们认真看完,当然有些内容对小白同学不是太友好,如果你需要详细了解其中的一些概念或者名词,请在文章之后留言,后续我将针对大家的疑问,整理输出一些大家感兴趣的文章。随着开发模式的迭代更新,前后端分离已不是新的概念,

  9. FIFO实战学习-同步FIFO/异步FIFO-格雷码 - 2

    目录FIFO一.自定义同步FIFO1.1代码设计1.2Testbech1.3行为仿真***学习位宽计算函数$clog2()***$clog2()系统函数使用,可以不关注***分布式资源或者BLOCKBRAM二.异步FIFO2.1在FIFO判满的时候有两种方式:2.2异步FIFO为什么要使用格雷码2.2.1介绍格雷码2.2.2格雷码在异步FIFO中的应用2.2.2格雷码判满2.4二进制与格雷码之间的转换2.4.1二进制码转换为格雷码的方法2.4.2格雷码转换为二进制码的方法2.3实现框图2.5实现及仿真代码2.6仿真图验证2.7结论FIFO  这篇更多的是记录FIFO学习,参考了众多优秀的文章,

  10. ruby-on-rails - 获取错误 Apple 推送通知 OpenSSL::SSL::SSLError - 2

    OpenSSL::SSL::SSLError(SSL_connectSYSCALLreturned=5errno=0state=SSLv3readserversessionticketA):为苹果推送通知Houstongem集成库。自上两个月以来,它运行顺利,但现在在应用程序中出现错误。尝试多种解决方案来解决问题。也尝试使用新的证书pem文件,但遇到相同的错误..有时它可以工作请帮忙解决问题。 最佳答案 错误严格来说是您使用了错误的APNS证书。它可能已过期,或者它只是一个旧证书的类型(在2015年12月之前创建)。一年前,Appl

随机推荐