Я использую php
cURL
для имитации отправки данных на сервер, но он не работает так же, как и форму submit.
HTML
код формы (он работает):
form action="username:[email protected]/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
отправить", Edit and Resend
не редактирую какую-либо информацию, нажмите " Send
. Он тоже не работает, результат такой же, как и результат кода cURL
.
Как я знаю, сервер IBM_HTTP_SERVER/1.3.19.1 Apache/1.3.20 (Unix)
У меня нет идеального, как это происходит. Пожалуйста, научите меня!
Попробуйте json_encode для массивов:
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
Сначала исправьте отсутствующую одинарную цитату из значения v1
. После этого используйте http_build_query
в массиве $data
перед отправкой как POST.
$data = array('id'=>'v1', 'body:query'=>'v2', 'update'=>'0', 'body:par1'=>'xx');
$data = http_build_query($data);