2012-01-11 108 views
2

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

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'); 

这将引发以下异常: 未知或erroreous卷曲选项 'CURLOPT_HEADER' 设置

我如何设置内容类型是否正确?

回答

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

你使用的是用来设置CURL报告服务器收到响应报头中的CURLOPT_HEADER,发送HTTP标头:

<?php 

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

?> 

我不知道zend_HHTP_Client可言,但试试这个:

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

我需要一个Zend_Http_Client – tom 2012-01-11 10:58:06

+0

CURLOPT_HTTPHEADER的解决方案是抛出同样的异常 – tom 2012-01-11 10:59:25

+0

阵列中的尝试 - 阵列(“内容类型:$ mime类型”) – Prof83 2012-01-11 11:00:37