我使用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)
我没有任何理想如何发生。请教我!
答案 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