Ответ 1
Вам не нужно устанавливать длину контента самостоятельно. Если вы используете cURL для отправки HTTP POST, он рассчитает длину контента для вас.
Если вы установите значение CURLOPT_POSTFIELDS
в качестве массива, оно автоматически отправит запрос как multipart/form-data
и использует границу. Если вы передадите строку, она будет использовать application/x-www-form-urlencoded
, поэтому убедитесь, что вы передали строку с urlencoded в CURLOPT_POSTFIELDS
, а не массив, так как вы хотите получить форму-urlencoded.
Вам нужно сделать это:
$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
кодировки в форме.
Если это не помогает, разместите весь код, относящийся к настройке запроса на завивание (все параметры и данные, которые вы передаете ему), и это должно помочь решить проблему.
EDIT:
Добавлен пример, который я придумал, что работает (я получил неудачный вход в систему).
<?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;