使用REQUEST::REQUEST_MULTY()发送JSON有效负载

时间:2020-06-13 作者:Sisir

我有一个外部api,它将json主体作为有效负载。我正在尝试发送多个并行请求。所以我没有使用wp_remote_post()

我的代码的wp\\u remote\\u post()版本工作得很好。

使用发送JSON负载wp_remote_post()

这很有效!

        $response = wp_remote_post($url, [
            \'body\' => json_encode($registrants), // requried keys [firstName, lastName, email]
            \'headers\' => [
                \'Authorization\' => \'Bearer \' . $accessToken,
                \'Content-Type\' => \'application/json; charset=utf-8\'
            ],
            \'data_format\' => \'body\',
            \'timeout\' => 10,
        ]);

        return json_decode(wp_remote_retrieve_body($response));
现在我也在尝试Request::request_multiple() 但数据不是作为json主体发送的。

使用发送JSON负载Request::request_multiple()

不工作!

    $requests[] = [
            \'url\' => $url,
            \'type\' => \'POST\',
            \'body\' => json_encode($registrant), // requried keys [firstName, lastName, email]
            \'headers\' => [
                \'Authorization\' => \'Bearer \' . $accessToken,
                \'Content-Type\' => \'application/json; charset=utf-8\'
            ],
            \'data_format\' => \'body\',
            \'timeout\' => 30,
        ];

    $options = [
        \'data_format\' => \'body\'
    ];

    $resp = Requests::request_multiple($requests, $options);
    foreach($resp as $response){
        var_dump($response);
        $responses[] = json_decode($response->body);
    }

我从API中得到的错误非常具体,当它没有获得JSON正文负载时抛出。

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

You can\'t.

WordPress中捆绑的请求库不支持此功能。原因是request_multiple 函数仅接受以下参数:

* @param array $requests Request data (array of \'url\', \'headers\', \'data\', \'options\') as per {@see Requests_Transport::request}
body 不是这些参数之一,这解释了请求失败的原因。阅读代码可以确认库的fsock/curl级别都是这样。

而是:

如果要继续使用,请执行非并行请求Requests

  • 切换到Guzzle等替代库
    • 我还建议在GitHub上打开问题,似乎没有任何技术原因无法更改它以支持body 参数,但在编写这些接口时,没有人添加它

    SO网友:mozboz

    您是否注意到$registrant变量在这两种情况下的拼写不同?

    如果这不是问题,请尝试打印json_encode($registrant) 在你发送之前,看看它看起来是否正确。

    相关推荐

    How deactivate the http-api

    为它提供一个tipp或解决方案来停用WP\\U Http\\U Streams类中的方法request()?我也在脱机服务器上使用WordPress,并让wp\\U debug true用于开发和测试。但是我从函数中得到了很多关于使用http类的警告;例如,在仪表板中读取提要的函数。目前我已经停用了更新主题、插件、核心和cron的所有挂钩;请参阅我的小插件:https://github.com/bueltge/WP-Offline谢谢你的回复