如何使用HTTP API复制cURL XML请求?

时间:2016-10-04 作者:Jason

我正在开发一个插件,该插件向供应商的发货API发布XML请求以获取发货报价。XML存储在一个名为$XML的字符串中。我可以使用以下参数使用curl成功发布XML请求:

$curl = curl_init( $this->settings[\'api_url\'] );
curl_setopt( $curl, CURLOPT_HEADER, 0 );
curl_setopt( $curl, CURLOPT_POST, 1 );
curl_setopt( $curl, CURLOPT_TIMEOUT, 45 );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, 0 );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $xml );
$result = curl_exec( $curl );
curl_close( $curl );
我的问题是,如何使用WordPress HTTP API做同样的事情?我想最大限度地提高那些服务器上可能没有curl的服务器的兼容性。

以下是我所做的HTTP API尝试:

$result = wp_remote_post(
    $this->settings[\'api_url\'],
    array(
        \'method\'      => \'POST\',
        \'timeout\'     => 45,
        \'redirection\' => 5,
        \'httpversion\' => \'1.1\',
        \'headers\'     => array(
            \'Content-Type\' => \'text/xml\'
        ),
        \'body\'        => array(
            \'postdata\'     => $xml
        ),
        \'sslverify\'   => \'false\'
    )
);
我尝试将身体改为:

\'body\' => array( $xml ),
我已经尝试将$xml转换为带有简单xml和json的php关联数组。

在我所有的尝试中,我一直在供应商的回复中发现一个错误:“prolog中不允许内容。”XML可能没有正确发布,或者HTTP API可能包含字节顺序标记(BOM)。

希望有人能帮忙。谢谢

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

我尝试了更多的尝试和错误,并通过简单地将$xml作为主体,而不将其指定为数组,成功地实现了它。函数引用说,“Post数据应该作为一个数组发送到身体中”,所以我不知道它为什么起作用。

以下是工作代码,以防它对其他人有所帮助:

// Sends the xml request to the API
$result = wp_remote_post(
    $this->settings[\'api_url\'],
    array(
        \'method\'      => \'POST\',
        \'timeout\'     => 45,
        \'redirection\' => 5,
        \'httpversion\' => \'1.1\',
        \'headers\'     => array(
            \'Content-Type\' => \'text/xml\'
        ),
        \'body\'        => $xml,
        \'sslverify\'   => \'false\'
    )
);

SO网友:T.Todua

我想你应该body 像这样:

\'body\' => array( \'username\' => \'bob\', \'password\' => \'1234xyz\' ),
阅读more 有关详细信息。

p、 我怀疑你什么时候改的$xml 对于数组,它无法工作,因为在这种情况下,您可能会得到:

\'body\' => array( array(........))