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
相关产品推荐
相关产品推荐

