Mailchimp API 换服务器后,原正常可用的 Campaign 发送接口报 Bad Request
迁移服务器后Mailchimp Campaign发送接口Bad Request排查
问题场景
业务服务迁移至全新服务器后,Mailchimp Campaign创建流程可正常执行,仅在调用Campaign发送接口时返回HTML格式的通用Bad Request错误(非业务接口常规返回的JSON格式错误),说明请求未到达Mailchimp业务后端,在前置网络层就被拦截。
潜在报错诱因
- 请求头规范匹配问题:当前代码配置的
Content-Type: application/vnd.api+json不符合Mailchimp 3.0接口的实际要求。老服务器环境对不规范请求的容忍度更高,新服务器对应的前置CDN/WAF会直接拦截不符合规范的请求 - curl版本行为差异:新老服务器的curl版本存在版本差,新版本curl在发起无显式请求体的POST请求时,会自动附加
Expect: 100-continue请求头;若新服务器curl编译时未内置gzip编码支持,还会生成畸形的Accept-Encoding头,两类异常都会触发前置CDN的通用Bad Request拦截 - 请求URL拼接异常:新服务器读取的
oauth_api_endpoint配置值携带隐藏特殊字符(如尾部空格、换行符),导致拼接出的API域名结构畸形,无法被CDN正常路由 - User-Agent配置失效:代码中引用的
$cuseragnet变量在新服务器环境下未正确赋值(为空或携带特殊字符),触发WAF的可疑请求拦截规则
排障操作步骤
- 开启curl请求调试,通过
curl_getinfo()提取实际发出的完整请求URL、发送的请求头列表,与老服务器的正常请求日志逐行比对差异 - 显式补充POST空请求体配置:
curl_setopt($ch, CURLOPT_POSTFIELDS, '{}');,避免空POST导致的请求结构异常 - 强制移除自动附加的Expect头:在请求头数组中加入
Expect:空值项 - 修正Content-Type配置为标准的
application/json - 对比新老服务器的curl版本、SSL编译参数,排除环境依赖差异导致的请求问题
内容的提问来源于stack exchange,提问作者Clint C.
相关产品推荐
相关产品推荐

