设置HTTP请求“内容类型”

时间:2012-03-22 14:01:33

标签: php curl http-headers

如何设置HTTP请求的内容类型?

我试过这个:

$headers['Accept'] = 'application/xml';
$headers['Content-Type'] = 'application/xml';

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

这就是结果:

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/html;charset=UTF-8
Date: Thu, 22 Mar 2012 14:04:36 GMT

但到目前为止没有运气...... 在HTTP响应中获取Content-Type: application/xml该怎么办?

2 个答案:

答案 0 :(得分:27)

我认为标题必须是普通数组,其元素是完整键:值标题,而不是关联数组:

$headers = array();
$headers[] = 'Accept: application/xml';
$headers[] = 'Content-Type: application/xml';

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

这在curl_setopt() documentation.

中指定

答案 1 :(得分:2)

你为你的请求设置了一个接受类型(并使用Michael的答案,你应该把他的答案算作回答直接问题,因为它确实如此)。这并不要求服务器重新使用该内容类型。

如果请求的另一端是静态文件,则必须确保您的Web服务器使用MIME类型application / xml发送该文件。如果它以.xml结尾,那么Apache和IIS都已经这样做了。如果它是其他非标准文件扩展名,但您希望它作为application / xml发送,那么您必须让服务器管理器设置httpd.conf或.htaccess以添加mime类型文件。在IIS中,您使用GUI管理工具执行相同的操作,将文件扩展名的mime类型添加为application / xml。

如果请求的另一端是服务器端脚本语言,如PHP,Perl,Python,ColdFusion,ASP,ASP.net等,那么您需要在该语言中使用适当的方法/函数来编写脚本被调用以发出内容类型标题并将其设置为application / xml。

更新:你在评论中说你正在使用WizTools发出一个返回application / xml的请求。如果要克隆该环境,请在curl请求中发送它发送的所有标头。一个猜测是用户代理可能正在发挥作用。