×

分享到微信

请使用微信扫描二维码

微信内请用右上角菜单:发送给朋友 / 分享到朋友圈

一行代码推送手机通知

免费 实时 跨平台 保护隐私
虾推啥 - 一行代码推送手机通知服务展示

使用场景

量化交易

服务器运维

网络爬虫

游戏脚本外挂

使用方法

  1. 关注:微信扫一扫下面的二维码,关注我们的公众号
    虾推啥微信公众号二维码 - 关注获取推送token
  2. 复制:关注后自动收到token并复制保存
  3. 推送:发送http请求,推送到微信
    复制如下文本
    https://wx.xtuis.cn/ABCDEFG.send?text=黄金大涨&desp=黄金大涨100元

    粘贴到网页浏览器的地址栏里,并用您的token替换其中的ABCDEFG,回车,即可收到微信通知。

    虾推啥HTTP请求推送示例 - 浏览器地址栏使用方法
    或者使用常用语言推送:
    GET 示例

    下方示例基于同一个 GET 请求思路(将参数编码后拼到 URL)。请把 您的token 替换成你自己的 token。

    curl -G 'https://wx.xtuis.cn/您的token.send' \
      --data-urlencode 'text=黄金大涨' \
      --data-urlencode 'desp=黄金大涨100元'
    import requests
    
    params = {
        "text": "黄金大涨",
        "desp": "黄金大涨100元",
    }
    
    response = requests.get(
        "https://wx.xtuis.cn/您的token.send",
        params=params,
        timeout=10,
    )
    
    print(response.text)
    const params = new URLSearchParams({
      text: "黄金大涨",
      desp: "黄金大涨100元",
    });
    
    fetch(`https://wx.xtuis.cn/您的token.send?${params.toString()}`)
      .then((res) => res.text())
      .then((text) => console.log(text));
    const axios = require("axios");
    
    axios
      .get("https://wx.xtuis.cn/您的token.send", {
        params: {
          text: "黄金大涨",
          desp: "黄金大涨100元",
        },
        timeout: 10000,
      })
      .then(({ data }) => console.log(data))
      .catch((err) => console.error(err.message));
    package main
    
    import (
        "fmt"
        "io"
        "net/http"
        "net/url"
    )
    
    func main() {
        params := url.Values{}
        params.Set("text", "黄金大涨")
        params.Set("desp", "黄金大涨100元")
    
        endpoint := "https://wx.xtuis.cn/您的token.send?" + params.Encode()
        resp, err := http.Get(endpoint)
        if err != nil {
            panic(err)
        }
        defer resp.Body.Close()
    
        body, _ := io.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    <?php
    $query = http_build_query([
        'text' => '黄金大涨',
        'desp' => '黄金大涨100元',
    ]);
    
    $url = 'https://wx.xtuis.cn/您的token.send?' . $query;
    $result = file_get_contents($url);
    
    echo $result;
    import java.net.URI;
    import java.net.URLEncoder;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.nio.charset.StandardCharsets;
    
    HttpClient client = HttpClient.newHttpClient();
    String query = "text=" + URLEncoder.encode("黄金大涨", StandardCharsets.UTF_8)
        + "&desp=" + URLEncoder.encode("黄金大涨100元", StandardCharsets.UTF_8);
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://wx.xtuis.cn/您的token.send?" + query))
        .GET()
        .build();
    
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
    using System;
    using System.Net.Http;
    using System.Threading.Tasks;
    
    using var client = new HttpClient();
    
    var query = $"text={Uri.EscapeDataString("黄金大涨")}&desp={Uri.EscapeDataString("黄金大涨100元")}";
    var url = $"https://wx.xtuis.cn/您的token.send?{query}";
    
    var result = await client.GetStringAsync(url);
    Console.WriteLine(result);
    require "uri"
    require "net/http"
    
    uri = URI("https://wx.xtuis.cn/您的token.send")
    uri.query = URI.encode_www_form(
      text: "黄金大涨",
      desp: "黄金大涨100元"
    )
    
    response = Net::HTTP.get_response(uri)
    puts response.body
    use reqwest::blocking::Client;
    use reqwest::Url;
    
    fn main() -> Result<(), Box<dyn std::error::Error>> {
        let mut url = Url::parse("https://wx.xtuis.cn/您的token.send")?;
        url.query_pairs_mut()
            .append_pair("text", "黄金大涨")
            .append_pair("desp", "黄金大涨100元");
    
        let body = Client::new().get(url).send()?.text()?;
        println!("{body}");
        Ok(())
    }
    import java.net.URI
    import java.net.URLEncoder
    import java.net.http.HttpClient
    import java.net.http.HttpRequest
    import java.net.http.HttpResponse
    import java.nio.charset.StandardCharsets
    
    fun main() {
        val query = "text=" + URLEncoder.encode("黄金大涨", StandardCharsets.UTF_8) +
            "&desp=" + URLEncoder.encode("黄金大涨100元", StandardCharsets.UTF_8)
    
        val request = HttpRequest.newBuilder()
            .uri(URI.create("https://wx.xtuis.cn/您的token.send?$query"))
            .GET()
            .build()
    
        val response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString())
        println(response.body())
    }
    $text = [uri]::EscapeDataString("黄金大涨")
    $desp = [uri]::EscapeDataString("黄金大涨100元")
    
    $url = "https://wx.xtuis.cn/您的token.send?text=$text&desp=$desp"
    $result = Invoke-RestMethod -Method Get -Uri $url
    
    $result
    推送支持POST方法,推送内容最大支持64KB大小的文字。以下是常用语言 POST 示例:
    POST 示例

    POST 示例默认发送 application/x-www-form-urlencoded,字段名为 textdesp

    curl 'https://wx.xtuis.cn/您的token.send' \
      --data-urlencode 'text=你的标题' \
      --data-urlencode 'desp=最大支持64KB的文字内容'
    import requests
    
    payload = {
        "text": "你的标题",
        "desp": "最大支持64KB的文字内容",
    }
    
    response = requests.post(
        "https://wx.xtuis.cn/您的token.send",
        data=payload,
        timeout=10,
    )
    
    print(response.text)
    const body = new URLSearchParams({
      text: "你的标题",
      desp: "最大支持64KB的文字内容",
    });
    
    fetch("https://wx.xtuis.cn/您的token.send", {
      method: "POST",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
      },
      body,
    })
      .then((res) => res.text())
      .then((text) => console.log(text));
    const axios = require("axios");
    
    const form = new URLSearchParams({
      text: "你的标题",
      desp: "最大支持64KB的文字内容",
    });
    
    axios
      .post("https://wx.xtuis.cn/您的token.send", form, {
        headers: {
          "Content-Type": "application/x-www-form-urlencoded",
        },
        timeout: 10000,
      })
      .then(({ data }) => console.log(data))
      .catch((err) => console.error(err.message));
    package main
    
    import (
        "fmt"
        "io"
        "net/http"
        "net/url"
    )
    
    func main() {
        form := url.Values{}
        form.Set("text", "你的标题")
        form.Set("desp", "最大支持64KB的文字内容")
    
        resp, err := http.PostForm("https://wx.xtuis.cn/您的token.send", form)
        if err != nil {
            panic(err)
        }
        defer resp.Body.Close()
    
        body, _ := io.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    <?php
    $payload = http_build_query([
        'text' => '你的标题',
        'desp' => '最大支持64KB的文字内容',
    ]);
    
    $opts = [
        'http' => [
            'method'  => 'POST',
            'header'  => "Content-Type: application/x-www-form-urlencoded\r\n",
            'content' => $payload,
        ],
    ];
    
    $context = stream_context_create($opts);
    $result = file_get_contents('https://wx.xtuis.cn/您的token.send', false, $context);
    
    echo $result;
    import java.net.URI;
    import java.net.URLEncoder;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.nio.charset.StandardCharsets;
    
    HttpClient client = HttpClient.newHttpClient();
    String form = "text=" + URLEncoder.encode("你的标题", StandardCharsets.UTF_8)
        + "&desp=" + URLEncoder.encode("最大支持64KB的文字内容", StandardCharsets.UTF_8);
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://wx.xtuis.cn/您的token.send"))
        .header("Content-Type", "application/x-www-form-urlencoded")
        .POST(HttpRequest.BodyPublishers.ofString(form))
        .build();
    
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
    using System;
    using System.Collections.Generic;
    using System.Net.Http;
    using System.Threading.Tasks;
    
    using var client = new HttpClient();
    
    var form = new FormUrlEncodedContent(new Dictionary<string, string>
    {
        ["text"] = "你的标题",
        ["desp"] = "最大支持64KB的文字内容",
    });
    
    var response = await client.PostAsync("https://wx.xtuis.cn/您的token.send", form);
    var result = await response.Content.ReadAsStringAsync();
    Console.WriteLine(result);
    require "uri"
    require "net/http"
    
    uri = URI("https://wx.xtuis.cn/您的token.send")
    response = Net::HTTP.post_form(uri, {
      "text" => "你的标题",
      "desp" => "最大支持64KB的文字内容"
    })
    
    puts response.body
    use reqwest::blocking::Client;
    
    fn main() -> Result<(), Box<dyn std::error::Error>> {
        let body = Client::new()
            .post("https://wx.xtuis.cn/您的token.send")
            .form(&[
                ("text", "你的标题"),
                ("desp", "最大支持64KB的文字内容"),
            ])
            .send()?
            .text()?;
    
        println!("{body}");
        Ok(())
    }
    import java.net.URI
    import java.net.URLEncoder
    import java.net.http.HttpClient
    import java.net.http.HttpRequest
    import java.net.http.HttpResponse
    import java.nio.charset.StandardCharsets
    
    fun main() {
        val form = "text=" + URLEncoder.encode("你的标题", StandardCharsets.UTF_8) +
            "&desp=" + URLEncoder.encode("最大支持64KB的文字内容", StandardCharsets.UTF_8)
    
        val request = HttpRequest.newBuilder()
            .uri(URI.create("https://wx.xtuis.cn/您的token.send"))
            .header("Content-Type", "application/x-www-form-urlencoded")
            .POST(HttpRequest.BodyPublishers.ofString(form))
            .build()
    
        val response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString())
        println(response.body())
    }
    $body = @{
      text = "你的标题"
      desp = "最大支持64KB的文字内容"
    }
    
    $result = Invoke-RestMethod -Method Post `
      -Uri "https://wx.xtuis.cn/您的token.send" `
      -Body $body `
      -ContentType "application/x-www-form-urlencoded"
    
    $result

推送参数

步骤

直接发送http请求

HTTP请求格式

https://wx.xtuis.cn/您的token.send

参数说明:

  • text: 消息标题,必填。
  • desp: 消息内容,选填。

例如:

https://wx.xtuis.cn/您的token.send?text=白银大涨&desp=白银2012超过5000

步骤

仅支持iPhone,使用步骤如下:

  • iPhone下载软件"Bark"
  • 填写Bark私有服务器为虾推啥
  • 发送bark http请求

HTTP请求格式

注册:Bark服务器-私有地址

https://bark.xtuis.cn?xia=您的token

使用:发送Bark的http请求

https://bark.xtuis.cn/您的token.send

参数说明:

  • text: 消息标题,必填。
  • desp: 消息内容,选填。

例如:

https://bark.xtuis.cn/您的token.send?text=白银大涨&desp=白银2012超过5000
限制类别 限制条数 超过后处理规则
每日推送上限 300 账户可能被锁定;需在微信中打开 https://xtuis.cn/unlock/ 支付解锁
每分钟推送上限 10 账户可能被锁定;需在微信中打开 https://xtuis.cn/unlock/ 支付解锁
单ip每日http请求上限 5000 当前 IP 的请求可能被临时拒绝;更换出口 IP 后通常仍可继续推送(与账户锁定不同)

需要更高推送额度?

以上限制适用于免费微信/Bark推送服务。如需更高推送限额,可按需升级到以下服务: 升级版 Email 通知升级版 企业微信通知推送服务(请在微信中打开 xtuis.cn/payment/)。

消息状态追踪

每条消息发送后,虾推啥都会返回一个唯一的 msg_id。用这个 ID 可以查询这条消息最终的投递结果——是成功送达手机,还是因为某种原因失败了。常见用途:程序里加上失败重试、运维脚本里加上告警闭环、抢购脚本里确认通知确实到了。

msg_id 长这样:

wx_20260623164956_8db1c691e77fe369

查询接口(GET 请求):

https://msgstatus.xtuis.cn/status/你的msg_id

你的msg_id 换成实际拿到的 ID。例如:

https://msgstatus.xtuis.cn/status/wx_20260623164956_8db1c691e77fe369

返回内容会告诉你这条消息当前的状态(成功 / 失败 / 处理中),失败时会附带原因(比如 token 错误、未关注公众号、超限被锁定等),方便你在程序里做精确处理。

限流:同一个 IP 每分钟最多查询 5 次,超出会被拒绝(HTTP 429)。如果你在重试退避逻辑里循环查询,记得加上间隔,避免触发限流。

需要更详细的技术信息(msg_id 生成规则、状态码定义、查询接口实现细节),请参阅项目关于 msg_id 状态追踪的设计文档。

Agent Xtuis — 专为 AI Agent 打造

Agent Xtuis CLI 是专为 AI Agent 打造的命令行工具——让 Agent 直接用一条 shell 命令(xtuis send)把消息推到你的手机。CLI 本身不绑定具体 AgentClaude Code、Codex、Cline 等都能直接调用;不需要 Agent 自己拼 HTTP 请求、不需要在对话里暴露 token,全部走本地配置文件。

「自然语言一句话触发推送」的 Skill 自动适配目前仅支持 Claude Code(在 ~/.claude/skills/ 装一个 SKILL.md,Claude 会自动识别)。Codex / Cline 等其他 Agent 暂时通过 xtuis send 显式调用即可——后续会补上各自的 Skill 适配。

一句话,让 Agent 自己装好:

请阅读 https://xtuis.cn/doc/cli-setup.md 文档,按照步骤为我安装并配置 Agent Xtuis CLI。

把上面这句话发给你的 AI Agent,它会自动读取官方安装文档,独立完成 CLI 安装 → Skill 注册 → Token 配置 → 测试推送 全流程——整个过程中 Token 不会出现在对话里(Agent 会引导你自己在终端输入),你只需要最后看一眼手机,确认测试通知收到了。

装好后,你可以直接用自然语言指挥 Agent:

  • 「把这个错误堆栈虾推啥发给我」
  • 「部署跑完通知我」
  • 「把当前 git status 推到我手机」
  • 「提醒我下午 3 点开会」(Agent 会用 sleep / 定时任务实现延迟推送)

完整安装指南与命令清单:https://xtuis.cn/doc/cli-setup.md

常见问题 FAQ

什么是虾推啥

虾推啥是一个能让你轻松地使用一行代码(一个http请求)就可以推送消息到手机通知的工具服务。

为什么使用

免费:在条数限制范围内免费(有关条数限制参见推送参数)
简单:无需注册,无需安装客户端,跨平台使用,只需微信关注我们的公众号即可使用
实时:即时推送,延时毫秒级
保护隐私:我们定期清理数据,承诺不在服务器上保存您的任何消息数据

什么情况下账户会被锁定?

短时间内大量请求,或推送超过上方「推送限制」中的上限,账户会被锁定,无法再推送。锁定后需在微信中打开 https://xtuis.cn/unlock/ 支付后自动解锁。

如何解锁账户?

请在微信里打开 https://xtuis.cn/unlock/,系统会自动识别当前微信账号,支付完成后自动解锁。若仍有问题,发 E-mail 给 weixin@xtuis.cn

联系我们

检测到微信打开。可一键填入你的 Token 到下方示例(默认脱敏显示)。