Вам не нужно устанавливать длину контента самостоятельно.Если вы используете cURL для отправки HTTP POST, он рассчитает для вас длину содержимого.
Если вы установите значение CURLOPT_POSTFIELDS
в виде массива, он автоматически отправит запрос как multipart/form-data
и используетграница.Если вы передадите строку, она будет использовать application/x-www-form-urlencoded
, поэтому убедитесь, что вы передали строку с кодировкой urlen в CURLOPT_POSTFIELDS
, а не в массив, так как вы хотите, чтобы кодировался в форме.
Вам необходимо сделать это:*
$data = 'name=' . urlencode($value) . '&name2=' . urlencode($value2);
curl_setopt($this->hCurl, CURLOPT_POSTFIELDS, $data);
// NOT
$dataArray = array('name' => 'value', 'name2' => 'value2');
curl_setopt($this->hCurl, CURLOPT_POSTFIELDS, $dataArray);
В любом случае вам не нужно устанавливать длину содержимого, но вы должны использовать первый метод для получения кодировки application/x-www-form-urlencoded
в форме.
Если это не такпомогите опубликовать весь код, относящийся к настройке запроса curl (все параметры и данные, которые вы передаете ему), и это должно помочь решить проблему.
РЕДАКТИРОВАТЬ:
Добавленоэто пример, который я нашел, что работает (я получаю неудачный вход в систему).
<?php
$URL_HOME = 'http://ilocalis.com/';
$LOGIN_URL = 'https://ilocalis.com/login.php';
$ch = curl_init($URL_HOME);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$home = curl_exec($ch);
//echo $home;
$post = array('username' => 'drew', 'password' => 'testing 123');
$query = http_build_query($post);
curl_setopt($ch, CURLOPT_URL, $LOGIN_URL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
$login = curl_exec($ch);
echo $login;