正文内容不正确 ngx.location.capture

incorrect body content ngx.location.capture

我想使用 lua+nginx

检测正确的 google 验证码数据 (API2)

我想使用ngx.location.capture功能。

Nginx 配置(派对):

location = /recaptcha/api/siteverify {
        resolver   8.8.8.8;
        proxy_pass https://www.google.com;
        }

部分lua代码:

local res = ngx.location.capture("/recaptcha/api/siteverify", {method = ngx.HTTP_POST,args ={ secret = "<MY_SECRET_KEY>", response = resp, remoteip = ip} })

在这种情况下,我收到不正确的 'binary' res.body 数据:

["�RPP*.MNN-.V�R()*M��

或在 nginx 日志中:

 ▒▒RPP*.MNN-.V▒RHK▒)N▒▒▒▒▒&秤▒ģ▒B@▒▒▒▒▒̼t▒̼▒▒ݢ▒▒▒▒T%▒d,W-▒)▒▒K 

如果您使用相同的请求纯 curl ... -X POST https://www.google.com/recaptcha/api/siteverif bash 命令,我会收到正确的数据:

{
  "success": false
}

为什么会发生?

proxy_pass_request_headers off; 在 nginx 配置文件中解决问题。

location = /recaptcha/api/siteverify {
internal;
resolver   8.8.8.8;
proxy_pass https://www.google.com;
proxy_pass_request_headers off;

}

我们在第 3 方扩展的 Magento 1.7.0.2 中遇到了同样的问题。仅在特定服务器上获得此类数据

‹       «жRPP*.MNN-.VІR()*MХ  %g$жд¤жҐ§Ж—ЂД•ЊНu
Ќt
CM¬L¬Ќў”А*3т‹KтsSAЄЉJіуSRs2уТхЉJ•ёjЊЗЂ¶^

更改 nginx 设置没有帮助。原来是gzipped answer。 我们已将 CURLOPT_ENCODING 更改为放气,问题已解决。