我有这个奇怪的问题,一旦我提交了一系列代码,它似乎就失去了它的密钥
$data = array(
'title' => array(
'en' => 'en test',
'fr' => 'fr test'
),
'description' => array(
'en' => 'description en',
'fr' => 'description fr'
),
);
try {
$oauth = new OAuth("xxx","xxx",OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_AUTHORIZATION);
$oauth->setToken("xxx","xxx");
// first output of array
echo '<pre>',print_r($data),'</pre>';
$oauth->fetch("http://foobar.com/rest/v1/", $data, OAUTH_HTTP_METHOD_POST , array('Content-Type' => 'application/x-www-form-urlencoded'));
// second output of array
echo '<pre>',print_r($data),'</pre>';
$response_info = $oauth->getLastResponseInfo();
header("Content-Type: {$response_info["content_type"]}");
echo $oauth->getLastResponse();
//print_r($oauth);
} catch(OAuthException $E) {
print_r($E);
echo "Exception caught!\n";
echo "Response: ". $E->lastResponse . "\n";
}
生成输出
// first output of array
Array
(
[title] => Array
(
[en] => en test
[fr] => fr test
)
[description] => Array
(
[en] => description en
[fr] => description fr
)
)
1
// second output of array
Array
(
[title] => Array
(
[0] => fr test
[1] => en test
)
[description] => Array
(
[0] => description fr
[1] => description en
)
)
如您所见,一旦传递了数据,阵列就会发生变化。
查看发送到服务器的标头,帖子数据看起来像
title=fr%20test&title=en%20test&description=description%20fr&description=description%20en
服务器端的api似乎没有接受任何东西,所以我认为问题可能与数组的发送方式有关。
答案 0 :(得分:0)
这可能是由于许多问题,很可能你的$ data变量作为oAuth库的引用传递,这个库可能会进行排序而不是asort或array_merge,这将从数组中删除键!
有一件事是肯定的,它肯定是导致这种情况的oAuth库。您只需执行以下操作即可复制数据:
$oauth->fetch("http://foobar.com/rest/v1/", $copy = $data, OAUTH_HTTP_METHOD_POST , array('Content-Type' => 'application/x-www-form-urlencoded'));
这会将数组复制到$ copy中,并保持$ data不变。您可能想要检查它为什么会改变数据!
修改强>
这是一种排序,查看数据,它在第二个var_dump中排序!反过来排序,但它已经排序了!