Как установить тип содержимого с помощью Zend_Http_Client на PUT? - PullRequest
2 голосов
/ 11 января 2012

Привет, я рефакторинг после вызова curl для вызова Zend_Http_Client. Это отправит запрос PUT в базу данных CouchDB с указанным файлом и установит правильный тип содержимого для _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' установлена ​​

Как правильно установить тип содержимого?

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Вместо использования:

$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,
);
1 голос
/ 11 января 2012

Вы используете CURLOPT_HEADER, который используется для установки CURL для сообщения заголовков, полученных ответом сервера, для отправки заголовков HTTP:

<?php

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: $mimeType"));

?>

Я вообще не знаю zend_HHTP_Client, но попробую это:

$adapter->setCurlOption('CURLOPT_HTTPHEADER', array("Content-Type: $mimeType"));
...