如何在 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 设置内容类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 put 方法更新 vue 组件上的数据?

在 post、put 和 delete 上使用 mongoose 和 node.js 休息 api

如何在 IIS 8.x 或更高版本上允许本地和远程的 POST、PUT

如何在 Azure 中启用 PUT 请求?

(转)SpringMvc如何使用form发送PUT和DELETE请求

使用 API PUT 请求上传文件