为什么这个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是什么?
答案 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
是一个字符串而不是一个数组,它会起作用。然而,如果你做不做所有这些事情,结果就会产生神秘的信息。