PHP HTTP POST获取"此API不支持解析表单编码输入。"

时间:2018-05-10 14:35:40

标签: php curl encoding

为什么这个PHP-7代码段没有正常工作?

    $json = json_encode($data);
    curl_setopt_array($this->ch, array(
        CURLOPT_URL                 => '...',
        CURLOPT_RETURNTRANSFER      => true,
        CURLOPT_SSL_VERIFYPEER      => false,
        CURLOPT_POST                => 1,
        CURLOPT_POSTFIELDS          => $json,
        CURLOPT_HTTPHEADER          => array(
                                            'Content-Type: application/json; charset=UTF8',
                                            'Content-Length: ' . strlen($json),
                                        ),
    ));

Google的API抱怨:"此API不支持解析表单编码的输入。"

但是,指定Google想要的编码的正确PHP-foo是什么?

2 个答案:

答案 0 :(得分:0)

您可能有非UTF8编码的字符串吗?

这家伙似乎有同样的问题https://groups.google.com/forum/#!topic/google-content-api-for-shopping/5I8MHpfbH4A

答案 1 :(得分:0)

好吧,我找到了它!

实际调用CURL调用(未显示)的子例程发布了自己的curl_setopt CURLOPT_HTTPHEADER,显然取代了此处显示的选项设置。

可行的代码如下所示:$headers与CURL调用例程合并了一些其他标题,此处未显示,通过CURLOPT_HTTPHEADER

    $json = json_encode($data);
    $headers = array(
        'Content-Type: application/json',
        'Content-Length: ' . strlen($json),
        'Accept: application/json'
        );
    curl_setopt_array($this->ch, array(
        CURLOPT_URL                 => '...',
        CURLOPT_RETURNTRANSFER      => true,
        CURLOPT_SSL_VERIFYPEER      => false,
        CURLOPT_POST                => true,
        CURLOPT_POSTFIELDS          => $json,
    ));

所以,我 尝试"正确的PHP mojo,"但没有意识到有些选项没有被设定 - 也就是说,设置没有"坚持" - 因为我的程序中的另一个错误从未显示在此票证上。

现在我们知道:如果您使用这些CURL选项,包含这些标题Accept:实际上取决于您...),并且确保CURL_POSTFIELDS是一个字符串而不是一个数组,它会起作用。然而,如果你做做所有这些事情,结果就会产生神秘的信息。