没有换行的POST失败,但换行有效吗?

时间:2015-05-13 00:37:42

标签: php json post

我正在调试一个PHP应用程序,我必须将一些数据发送到我的服务器,然后解析它并返回一些值 - 超级简单的东西。

数据格式为:

action=display_all_pols&donate_form=1&user_state=&state=AK&pols[LA][0][post_id]=2714&pols[LA][0][first_name]=Ralph&pols[LA][0][last_name]=Abraham &pols[LA][0][profile_image]=2762

我的数据大小因人而异,例如: 187字节,更大的东西,例如46KB。

我注意到我的应用程序无法正确解析POST。代码是这样的:

function Foo() {
    $state = somehow_get_state();
    $bar = $_POST['pols'][$state];
    // cool logic and stuff

我立即在die(var_dump($_POST));内放了一个Foo(),注意到只有一部分数据真正被张贴了。

当我在命令行上测试它时,我注意到:

之间存在差异
POST http://10.1.10.22/wesupportthat/wp-admin/admin-ajax.php
action=display_all_pols&donate_form=1&user_state=&state=AK&pols[LA][0][post_id]=2714&pols[LA][0][first_name]=Ralph&pols[LA][0][last_name]=Abraham &pols[LA][0][profile_image]=2762

这个(注意换行);

POST http://10.1.10.22/wesupportthat/wp-admin/admin-ajax.php
action=display_all_pols&donate_form=1&user_state=&state=AK&
pols[LA][0][post_id]=2714&
pols[LA][0][first_name]=Ralph&
pols[LA][0][last_name]=Abraham&
pols[LA][0][profile_image]=2762

前者只会发布大约3.1KB的数据,而后者则POST整个事情。

有原因吗?我发布了有效的JSON,因为对我的爱无法弄清楚为什么一个有用而另一个没有。

为了创建JSON,我正在创建一个嵌套数组,如下所示:

array( // root-level array
    array(
        '1' => 'somestring',
        '2' => '...',
        '3' => '...',
        '4' => '...'
    ),
    array( // same as previous),
    // more arrays, potentially up to 50 total
)

然后调用json_encode($my_array, JSON_HEX_APOS);来创建JSON。

我希望这只是一个橡皮鸭时刻。 : - )

编辑:我正在离开我的电脑,但TCP捕获显示同样的事情。我回来时还会添加我的Apache / php信息。

1 个答案:

答案 0 :(得分:0)

如果你正在使用suhosin扩展,并且在/var/log/user.log中失败的试验后看到这样的行:

suhosin[...]: ALERT - configured POST variable limit exceeded - dropped variable 'x' (attacker 'x.y.z.207', file 'some_script.php')

然后它可能是这个扩展,它正在弄乱你的请求。在这种情况下,您需要禁用或更新suhosin的配置,例如在/etc/php5/conf.d/suhosin.ini中

更新或添加以下行:

suhosin.post.max_vars = 3000
suhosin.request.max_vars = 3000

此配置允许最多3000个变量进入请求。