Попробуйте:
$postdata = 'user%5Blogin%5D=some%40email.pl&user%5Bpass%5D=testpass&user%5Bmemory%5D=on&user%5Bsubmit%5D=Login';
У вас не должно быть URL-кодированных ключей в массиве постданных, поскольку они снова будут URL-кодированы.В качестве альтернативы вы можете сделать:
$postdata = array(
'user[login]' => 'some@email.pl',
'user[pass]' => 'test',
// the rest of the vars here...
);
Но учтите, что , передав массив для $postdata
, не будет отправлять запрос в кодировке URL , он будет отправлять запрос с кодировкой multipart/form-data
.Из PHP документов :
CURLOPT_POSTFIELDS
Полные данные для отправки в HTTP-операции «POST».Чтобы опубликовать файл, добавьте @ к имени файла и используйте полный путь.Это может быть либо передано в виде строки в кодировке urlen, например, 'para1 = val1¶2 = val2 & ...', либо в виде массива с именем поля в качестве ключа и данными поля в качестве значения.Если значение является массивом, заголовок Content-Type будет установлен на multipart / form-data.
Таким образом, если вы передаете массив, значения и ключи уже не должны кодироваться URLEncoded.