如何对WP HTTP API的响应进行故障排除?

时间:2011-02-22 作者:Rarst

我对API进行了GET调用,调用应该不会返回任何数据:

浏览器(和嗅探器)给我200-OK响应null 正文文本

  • wp_remote_get() 给我200-OK响应,字符串为binary garbage 作为主体
  • 其他API请求(应该并确实返回非空数据)工作正常。

    从哪里开始戳HTTP API,以找出它最终以垃圾告终的原因?

    以下是完整响应数据的转储:

    array
      \'headers\' => 
        array
          \'date\' => string \'Tue, 22 Feb 2011 16:51:03 GMT\' (length=29)
          \'server\' => string \'Apache/2.2.3 (Red Hat)\' (length=22)
          \'x-powered-by\' => string \'PHP/5.2.16\' (length=10)
          \'content-encoding\' => string \'deflate\' (length=7)
          \'vary\' => string \'Accept-Encoding\' (length=15)
          \'content-length\' => string \'17\' (length=2)
          \'connection\' => string \'close\' (length=5)
          \'content-type\' => string \'application/json; charset=utf-8\' (length=31)
      \'body\' => string \'x��+��������_\' (length=17)
      \'response\' => 
        array
          \'code\' => int 200
          \'message\' => string \'OK\' (length=2)
      \'cookies\' => 
        array
          empty
    

    2 个回复
    最合适的回答,由SO网友:Rarst 整理而成

    [update] 支持MailChimp使用的压缩方法,had been implemented in WP core in version 3.3.

    本期came up again 这一次,我能够复制并解决它。

    WordPress声明,is需要具有高优先级的泄密数据,但由于某些原因,它无法夸大某些响应-它们都无法被任何一方识别gzinflate()WP_Http_Encoding::compatible_gzinflate().

    在我的具体案例中,似乎在开始时有两个额外的字节导致了这种情况。从中计算出comments to gzinflate() docs 这也是WP_Http_Encoding::compatible_gzinflate(), 但显然,这一功能并不完美。

    粗略的快速修复程序,检查响应是否包含JSON数据,并尝试纠正压缩问题,否则:

    add_filter(\'http_response\', \'mailchimp_http_response_inflate_fix\', 10, 3);
    
    function mailchimp_http_response_inflate_fix($response, $args, $url) {
    
        if( false === strpos($url, \'sts.mailchimp.com\') )
            return $response;
    
        $json = json_decode($response[\'body\']);
    
        if( is_null($json) ) {
    
            $inflate = @gzinflate(substr($response[\'body\'], 2));
    
            if( false !== $inflate )
                $response[\'body\'] = $inflate;
        }
    
        return $response;
    }
    

    SO网友:Barry Carlyon

    我们跟踪到内容编码“=>字符串”deflate“(长度=7)出错。

    WP\\u HTTP正在无缘无故地添加deflate头,并对结果进行ungzip压缩。只有当响应的主体小于某个字符串长度时,才会发生这种情况。

    当你想要的都是1或0时,这很烦人。

    对WP\\U黑客的查询尚未得到修复。可能需要进一步追查。。。。。

    结束

    相关推荐

    在现代电子商务环境中,HTTPS的正确使用是什么?

    传统上,https仅在绝对必要时使用,以保护个人和重要信息。结账和账户注册是最常见的。缺乏广泛实现的主要原因是计算开销降低了性能。随着计算开销不再是一个问题(如果你不这么认为,请研究你自己并测试,测试,测试),在今天的环境中什么是正确的用途。由于我一直在我的网站上工作,我开始得出结论,在整个网站上使用它绝对没有坏处,原因总结如下。1) 良好的EV证书可增强客户信心(绿色地址栏从来都不是坏事)2) 搜索引擎仍然可以找到您的产品(无论如何都是通过feed提交的)3) 性能不再是问题4) 如果你为证书付费,你也