如何在PUT上使用Zend_Http_Client设置内容类型?

时间:2012-01-11 10:52:19

标签: php zend-framework curl couchdb content-type

您好我正在重构以下curl调用Zend_Http_Client调用。这将使用给定文件向CouchDB数据库发送PUT请求,并为_attachement设置正确的Content-Type。

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 个答案:

答案 0 :(得分:2)

而不是使用:

$client->setRawData($filePath);
$adapter->setCurlOption('CURLOPT_HEADER', "Content-Type: $mimeType");

我不得不使用:

$client->setRawData(file_get_contents($filePath));
$client->setHeaders('Content-Type', $mimeType);

显然你不能通过setCurlOption()设置一些CURLOPT_;

$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 :(得分:1)

您正在使用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"));