Я использую следующую команду для обновления базы данных (разрывы строк имеют жизненно важное значение):
curl -X PUT -H 'Content-Type: multipart/form-data; boundary=myboundary' -d '--myboundary Content-ID: <request>
{"jsonKey":"jsonValue"} --myboundary-' 'http://target.url.com/path/to/folder'
Это работает правильно, но PHP-эквивалент имеет проблемы:
$data = '--myboundary Content-ID: <request>
{"jsonKey":"jsonValue"} --myboundary-';
$handle = curl_init();
curl_setopt_array(
$handle,
array(
CURLOPT_URL => 'http://target.url.com/path/to/folder',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => 'Content-Type: multipart/form-data; boundary=myboundary',
CURLOPT_BINARYTRANSFER => true,
CURLOPT_POSTFIELDS => $data
)
);
$response = curl_exec($handle);
if($response === false){
echo 'curl error: ' . curl_error($handle);
}
curl_close($handle);
return $response;
Он не возвращает ошибок, но данные, введенные как json, имеют значение null.
Я проверил все остальное, но не могу найти четкую информацию о том, как cURL обрабатывает разрывы строк, и предполагаю, что между PHP-разрывами и консольными разрывами есть некоторая разница.
Любое понимание проблемы разрывов строк, или почему это может не работать, будет оценено.
И в случае, если кто-то думает об очевидном: нет, я не могу изменить базу данных или даже просмотреть ее (правила работы), и это нужно запустить из PHP (по той же причине).
В первом примере вы используете POST. Во втором примере вы используете PUT. Вы уверены, что это правильно?
CURLOPT_CUSTOMREQUEST => 'PUT',
Других решений пока нет …