今天在做一个api增量的功能的时候出现了一个特别奇怪的问题。我用curl 向tomcat post数据的时候,tomcat竟然报错,说我post的数据没有正确获得。但是,我用curl post给我自己写的一个页面,就可以在$_POST数组中获得数据。
为什么会出现这种问题那?
原因是在构建post 数据的数量出现问题。。。
1
function
api_notice_increment(
$url
,
$data
)
2
{
3
$ch
=
curl_init();
4
curl_setopt(
$ch
,
CURLOPT_HEADER
,
0
);
5
curl_setopt(
$ch
,
CURLOPT_RETURNTRANSFER
,
1
);
6
7
curl_setopt(
$ch
,
CURLOPT_URL
,
$url
);
8
curl_setopt(
$ch
,
CURLOPT_POST
,
1
);
9
curl_setopt(
$ch
,
CURLOPT_POSTFIELDS
,
$data
);
10
$lst
[
'
rst
'
]
=
curl_exec(
$ch
);
11
$lst
[
'
info
'
]
=
curl_getinfo(
$ch
);
12
curl_close(
$ch
);
13
return
$lst
;
14
}
15
$url
=
"
http://localhost/test/post.api.php?app=test&act=testact
"
;
16
$data
=
array
(
17
'
goods_id
'
=>
'
1010000001224
'
,
18
'
store_id
'
=>
'
20708
'
,
19
'
status
'
=>
'
GoodsDownshelf
'
,
20
);
//post.api.php的代码
<?
php
error_log
(
var_export
(
$_POST
,
1
)
,
3
,
'
d:/post.txt
'
);
执行上面的代码,在我的d:/生成的post.txt文件,其内容如下:
array (
'goods_id' => '1010000001224',
'store_id' => '20708',
'status' => 'GoodsDownshelf',
)
说明post的数据可以正常的获得。
修改上的代码
1
<?
php
2
function
api_notice_increment(
$url
,
$data
)
3
{
4
$ch
=
curl_init();
5
curl_setopt(
$ch
,
CURLOPT_HEADER
,
0
);
6
curl_setopt(
$ch
,
CURLOPT_RETURNTRANSFER
,
1
);
7
8
curl_setopt(
$ch
,
CURLOPT_URL
,
$url
);
9
curl_setopt(
$ch
,
CURLOPT_POST
,
1
);
10
$data
=
http_build_query
(
$data
);
11
curl_setopt(
$ch
,
CURLOPT_POSTFIELDS
,
$data
);
12
$lst
[
'
rst
'
]
=
curl_exec(
$ch
);
13
$lst
[
'
info
'
]
=
curl_getinfo(
$ch
);
14
curl_close(
$ch
);
15
return
$lst
;
16
}
17
$url
=
"
http://localhost/test/post.api.php?app=test&act=testact
"
;
18
$data
=
array
(
19
'
goods_id
'
=>
'
1010000001224
'
,
20
'
store_id
'
=>
'
20708
'
,
21
'
status
'
=>
'
GoodsDownshelf
'
,
22
);
23
24
25
api_notice_increment(
$url
,
$data
);
只是在执行 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);之前执行下$data = http_build_query($data);操作。
删除d:/post.txt文件
再次运行。
再次打开d:/post.txt文件,其内容如下:
array (
'goods_id' => '1010000001224',
'store_id' => '20708',
'status' => 'GoodsDownshelf',
)
如果不将$data 进行http_build_query的话,java代码就不能获得post的数据,http_build_query以后就可以正常的获得了。