簡體   English   中英

CURL發布數據與表單提交不同

[英]CURL post data not the same as form submit

我使用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)

我沒有理想的情況。 請教我!

首先,從值v1糾正缺少的單引號。 之后,在$data POST之前使用$data數組上的http_build_query

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

嘗試json_encode數組:

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM