CURL帖子数据与表单提交

时间:2016-01-07 11:08:14

标签: php apache curl

我使用php cURL来模拟向服务器发布数据,但它与表单提交的工作方式不同。

HTML表单代码(可行):

form action="username:password@server.dev/abc" method="POST">
<input name='id' value='v1'>
<input name='body:query' value='v2'>
<input name='update' value='0'>
<input name='body:par1' value='xx'>
<input type='submit' value='GO'>
</form>

CURL代码(不工作):

$data = array('id'=>'v1', 'body:query'=>'v2', 'update'=>'0', 'body:par1'=>'xx');
$header = array(
            'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0',
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language: en-US,en;q=0.5',
            'Accept-Encoding: gzip, deflate',
            'Cookie: wait=1',
            'Authorization: Basic ' . base64_encode("{$strUser}:{$strPass}"),
            'Connection: keep-alive',
            "Content-Type: application/x-www-form-urlencoded"
            );
curl_setopt($ch, CURLOPT_URL, $strUrl);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$htmlDoc = curl_exec($ch);

“不工作”表示服务器返回差异响应。

还有一件事是,当我通过Firefox Developer Edition提交上面的表单时,我打开网络标签,点击Edit and Resend,不要编辑任何信息,点击Send。它也不起作用,结果与cURL代码的结果相同。

据我所知,服务器是IBM_HTTP_SERVER/1.3.19.1 Apache/1.3.20 (Unix)

我没有任何理想如何发生。请教我!

2 个答案:

答案 0 :(得分:0)

首先,从值v1更正缺少的单引号。之后,在http_build_query数组上使用$data,然后再发送POST。

$data = array('id'=>'v1', 'body:query'=>'v2', 'update'=>'0', 'body:par1'=>'xx');
$data = http_build_query($data);

答案 1 :(得分:0)

尝试对数组使用json_encode:

ItemsControl