设置HTTP请求”;内容类型”;


Set HTTP Request "Content-Type"

如何设置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

我认为标头必须是一个元素为全键:值标头的普通数组,而不是一个关联数组:

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

这在curl_setopt()文档中有规定。

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

如果请求的另一端是静态文件,则必须确保web服务器发送的文件具有application/xml的MIME类型。如果它以.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请求中发送的所有头。一种猜测是用户代理可能正在发挥作用。