Не получает POST-данные на другом конце запроса cURL - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть запрос curl, как показано ниже, который должен отправить запрос PUT в файл PHP на моем веб-сервере.Когда я получаю этот запрос, я хочу перечислить все данные POST, полученные с этим запросом PUT, но данные POST не получены.Пожалуйста, вы можете сказать мне, где я иду не так?

$ch = curl_init();
$fields = array(
        'username' => 'username'
);
curl_setopt($ch, CURLOPT_URL, "http://localhost/linetime/user/1");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);
var_dump($result);

1 Ответ

5 голосов
/ 09 ноября 2011

Данные, отправленные с PUT запросами, недоступны через $_POST.

Взгляните на то, что $_SERVER['CONTENT_TYPE'] говорит вам. Это multipart/form-data обычно с границей, как в письмах MIME. Вы можете прочитать данные PUT, используя поток ввода:

$putData = '';
$fp = fopen('php://input', 'r');
while (!feof($fp)) {
    $s = fread($fp, 64);
    $putData .= $s;
}
fclose($fp);

В вашем случае $putData теперь должен содержать что-то вроде:

------------------------------e85bfe7e43b5
Content-Disposition: form-data; name="username"

username
------------------------------e85bfe7e43b5--

Теперь все, что вам нужно, - это проанализировать эти данные, используя один из многих свободно доступных пакетов PEAR для обработки MIME.

...