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

Google Apps Script Web App的doPost()对接WordPress问题排查

WordPress向Google Apps Script Web App提交数据的问题解答

Q1:该错误为何未被is_wp_error捕获?

is_wp_error() 仅捕获请求发送阶段的异常,比如网络连接失败、DNS解析错误、请求超时这类根本无法到达目标服务器的错误。而400 Bad Request是服务器正常接收请求后返回的HTTP状态码,属于“请求已发送成功,但服务器认为请求不符合规范”的情况,这类响应不会被判定为WP错误,因此不会被is_wp_error()捕获。

Q2:既然返回400错误,为何doPost函数能正确获取POST体并更新单元格?

Google Apps Script Web App的执行逻辑是:先接收并解析请求参数,执行doPost()内的业务代码(比如写入表格),之后再处理响应的返回。即使请求存在不符合规范的地方(比如头信息不完整),只要参数能被正常解析,doPost()的核心逻辑就会执行完成;而400错误是在处理响应返回阶段触发的,不影响之前的业务代码执行。

Q3:PHP请求中还缺少什么配置?

结合测试结果(jQuery.post正常,PHP加Content-Type仍报错),可以尝试以下调整:

  • 显式设置X-Requested-With请求头:jQuery.post默认会携带X-Requested-With: XMLHttpRequest,部分服务会依赖这个头判定请求合法性,在PHP的headers数组中添加:
    'headers' => array(
        'Content-Type' => 'application/x-www-form-urlencoded',
        'X-Requested-With' => 'XMLHttpRequest'
    ),
    
  • 手动处理请求体编码:虽然数组会自动编码为表单格式,但可以用http_build_query()确保编码正确:
    'body' => http_build_query($body),
    
  • 临时关闭SSL验证(仅测试用):如果是SSL证书验证问题导致的隐性错误,可添加'sslverify' => false到请求配置中(正式环境不建议)。

Q4:若要API返回JSON数据或图片Blob,是否需要设置mimeType和Header?

  • 返回JSON数据:需要设置MimeType,ContentService会自动关联响应头,示例代码:

    function doPost(request){
        var data = {status: 'success', data: request.parameters};
        return ContentService.createTextOutput(JSON.stringify(data))
            .setMimeType(ContentService.MimeType.JSON);
    }
    

    setMimeType(JSON)会自动将响应头的Content-Type设为application/json,无需手动额外设置。

  • 返回图片Blob:需要使用createOutputFromBlob()并设置对应MimeType,示例代码:

    function doGet(){
        var imageBlob = DriveApp.getFileById('图片文件ID').getBlob();
        return ContentService.createOutputFromBlob(imageBlob)
            .setMimeType(ContentService.MimeType.PNG); // 根据图片类型调整MimeType
    }
    

    同样,setMimeType会自动匹配对应的Content-Type头,确保客户端能正确识别图片。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:37:38