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

标签 php zend-framework curl couchdb content-type

您好,我正在将curl 调用重构为Zend_Http_Client 调用。这将使用给定文件向 CouchDB 数据库发送 PUT 请求,并为 _attachment 设置正确的 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”

如何正确设置Content-Type?

最佳答案

而不是使用:

$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,
);

关于php - 如何在 PUT 上使用 Zend_Http_Client 设置内容类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8818014/

相关文章:

javascript - 作为表格单元格背景的静态进度条

php - 如何清除 APC 缓存条目?

php - Sources 文件夹已经是 NetBeans 项目(可能只在内存中)

php - Zend Mail - 无法从在线服务器发送邮件 - 连接被拒绝错误

php - Zend Rest Controller 中除默认操作外的更多操作

apache - zend 框架项目显示空白页面没有任何错误

PHP curl 将 Content-Type 更改为 application/x-www-form-urlencoded。不应该那样做

javascript - 如何在浏览器解释后使用 curl 扫描页面

ubuntu - 使用 Laravel,Guzzle 提示未安装 PHP cURL 扩展

php - 使用 php 从源代码中提取 css 类和 ID