如何在 PUT 上使用 Zend_Http_Client 设置内容类型?
Posted
技术标签:
【中文标题】如何在 PUT 上使用 Zend_Http_Client 设置内容类型?【英文标题】:How to set the content type with Zend_Http_Client on PUT? 【发布时间】:2012-02-07 17:37:59 【问题描述】:您好,我正在重构对 Zend_Http_Client 调用的 curl 调用。这将使用给定文件向 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”
如何正确设置 Content-Type?
【问题讨论】:
【参考方案1】:而不是使用:
$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,
);
【讨论】:
【参考方案2】:您正在使用 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"));
【讨论】:
我需要 Zend_Http_Client 的解决方案 CURLOPT_HTTPHEADER 抛出同样的异常 在数组内尝试 - array("Content-Type: $mimeType") 不幸的是,这没有帮助。 没问题,我找到了解决办法!以上是关于如何在 PUT 上使用 Zend_Http_Client 设置内容类型?的主要内容,如果未能解决你的问题,请参考以下文章
在 post、put 和 delete 上使用 mongoose 和 node.js 休息 api
如何在 IIS 8.x 或更高版本上允许本地和远程的 POST、PUT