Привет, я рефакторинг после вызова curl на вызов Zend_Http_Client. Это отправит запрос PUT в базу данных CouchDB с данным файлом и установит правильный Content-Type для _attachement.
exec( 'curl -s -X PUT ' . $url ' . '--data-binary @\'' . $filePath . '\' -H "Content-Type: ' . $mimeType . '"', $resultJson, $returnCode );
Рефакторинг для Zend_Http_Client У меня есть следующее:
$adapter = new Zend_Http_Client_Adapter_Curl(); $client = new Zend_Http_Client(); $client->setAdapter($adapter); $client->setUri($url); $client->setRawData($filePath); $adapter->setCurlOption('CURLOPT_HEADER', "Content-Type: $mimeType"); $response = $client->request('PUT');
Это вызывает следующее исключение: Неизвестная или ошибочная опция cURL 'CURLOPT_HEADER'
Как правильно установить Content-Type?
Вместо того, чтобы использовать:
$client->setRawData($filePath); $adapter->setCurlOption('CURLOPT_HEADER', "Content-Type: $mimeType");
Мне пришлось использовать:
$client->setRawData(file_get_contents($filePath)); $client->setHeaders('Content-Type', $mimeType);
По-видимому, вы не можете установить некоторые из CURLOPT_ через setCurlOption ();
$this->_invalidOverwritableCurlOptions = array( CURLOPT_HTTPGET, CURLOPT_POST, CURLOPT_PUT, CURLOPT_CUSTOMREQUEST, CURLOPT_HEADER, CURLOPT_RETURNTRANSFER, CURLOPT_HTTPHEADER, CURLOPT_POSTFIELDS, CURLOPT_INFILE, CURLOPT_INFILESIZE, CURLOPT_PORT, CURLOPT_MAXREDIRS, CURLOPT_CONNECTTIMEOUT, CURL_HTTP_VERSION_1_1, CURL_HTTP_VERSION_1_0, );
Вы используете CURLOPT_HEADER, который используется для установки CURL для представления HEADERS, полученных ответом сервера, для отправки HTTP-заголовков:
<?php curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: $mimeType")); ?>
Я вообще не знаю zend_HHTP_Client, но попробую:
$adapter->setCurlOption('CURLOPT_HTTPHEADER', array("Content-Type: $mimeType"));