Данные публикации CURL не совпадают с данными отправки формы

1

Я использую 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)

У меня нет идеального, как это происходит. Пожалуйста, научите меня!

  • 0
    Может быть любое количество причин, но, вероятно, токен CSRF. Посмотрите на вкладке сети и проверьте данные, которые отправляются с помощью формы, я думаю, есть больше, чем 4 поля, которые вы перечислили выше
  • 0
    Какой ответ вы хотите, и что вы получили?
Показать ещё 4 комментария
Теги:
curl

2 ответа

0

Попробуйте json_encode для массивов:

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

Сначала исправьте отсутствующую одинарную цитату из значения v1. После этого используйте http_build_query в массиве $data перед отправкой как POST.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню