You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用Google Apps Script实现Onnit订单追踪表单提交失败

问题分析与解决方案

为什么第一个POST请求失败

直接向order-tracking.php提交email和zip参数无效,核心原因:

  • 该页面的表单并非直接提交到自身,而是通过前端JavaScript将请求转发到了后端API接口
  • 缺少必要的请求头(如User-Agent、Referer)或隐藏参数(如CSRF令牌),导致服务器拒绝请求
  • 表单提交的目标URL并非你指定的PHP页面,而是未公开的API端点

正确实现流程

通过浏览器开发者工具抓包可知,订单追踪的实际流程分为两步:

  1. 提交Email和Zip Code到验证API,获取订单ID(order)和追踪哈希(trackingHash)
  2. 使用上述两个参数调用详情API,获取最终追踪数据

步骤1:模拟表单提交获取订单标识

先通过开发者工具的网络请求面板,找到网页提交表单时实际触发的POST API端点(通常类似https://api.onnit.com/orders/track),再用以下代码模拟请求:

function getOrderTrackingIdentifiers() {
  var email = "email@gmail.com";
  var zipcode = "12345";
  
  // 替换为抓包得到的实际API端点
  var apiEndpoint = "https://api.onnit.com/orders/track";
  
  var options = {
    method: "post",
    headers: {
      "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.107 Mobile Safari/537.36",
      "Referer": "https://www.onnit.com/cart/order-tracking.php",
      "Content-Type": "application/json" // 若表单是表单编码提交,替换为application/x-www-form-urlencoded
    },
    payload: JSON.stringify({
      email: email,
      zip: zipcode
    })
  };
  
  try {
    var response = UrlFetchApp.fetch(apiEndpoint, options);
    var data = JSON.parse(response.getContentText());
    
    // 根据实际响应结构提取参数,此处为示例
    var orderId = data.order.id;
    var trackingHash = data.trackingHash;
    
    return {orderId: orderId, trackingHash: trackingHash};
  } catch(e) {
    Logger.log("请求失败:" + e.toString());
    return null;
  }
}

步骤2:调用详情API获取追踪数据

用步骤1得到的参数,调用你已验证有效的详情API,并可将结果写入表格:

function fetchOrderTrackingData() {
  var identifiers = getOrderTrackingIdentifiers();
  if (!identifiers) return;
  
  var apiUrl = `https://api.onnit.com/orders/${identifiers.orderId}/shipments?trackingHash=${identifiers.trackingHash}`;
  
  var options = {
    method: "get",
    headers: {
      "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.107 Mobile Safari/537.36",
      "Referer": "https://www.onnit.com/cart/order-tracking.php"
    }
  };
  
  try {
    var response = UrlFetchApp.fetch(apiUrl, options);
    var content = response.getContentText();
    Logger.log(content);
    
    // 解析数据并写入表格示例
    var trackingData = JSON.parse(content);
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.appendRow([
      trackingData.order.id,
      trackingData.shipments[0].trackingNumber,
      trackingData.shipments[0].status
    ]);
  } catch(e) {
    Logger.log("获取追踪数据失败:" + e.toString());
  }
}

关键注意事项

  • 准确抓包:务必通过浏览器开发者工具确认表单提交的目标API、请求头、参数格式,避免用错端点
  • 请求头一致性:服务器会校验User-Agent、Referer等信息,需与浏览器请求保持一致
  • 异常处理:添加错误捕获逻辑,处理请求失败、响应解析错误等场景
  • API稳定性:这类未公开的API可能随时变更,需定期验证请求有效性

内容的提问来源于stack exchange,提问作者EagleEye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:20:34