2012-03-22 116 views
8

如何设置HTTP请求的内容类型?设置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 

但至今没有运气...
我有什么做的就是一个Content-Type: application/xml在我的HTTP响应?

+0

是的我知道,但是我需要在我的请求中设置一个'Content-Type:application/xml'响应吗? – Michiel 2012-03-22 14:08:13

+0

你给出的结果是HTTP **响应**而不是请求。你是问如何设置请求的内容类型,还是你问如何让服务器在响应中提供XML? – Quentin 2012-03-22 14:08:47

+0

您需要设置Accept标头(而不是内容类型标头)。然后服务器需要支持多种响应类型,并使用accept头来确定使用哪一个。你知道服务器是否这样做? – Quentin 2012-03-22 14:09:41

回答

24

我相信,标题必须是一个普通数组的元素是全键:值标题,不是关联数组:

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

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

这在curl_setopt() documentation.

+0

感谢您的尝试,但结果仍然相同。还是我必须清理一些东西? Coockies,cache,... – Michiel 2012-03-22 14:06:04

+0

这是HTTP响应吗?您在请求中发送内容类型标题。这并不意味着响应服务器将发回相同的内容类型。 – 2012-03-22 14:10:01

+0

我已经在* WizTools *中尝试了相同的请求,并且服务器返回了'application/xml' Content-Type,所以服务器能够发送正确的响应。只有当我尝试使用自定义PHP时,我不会发送'Content-Type'设置... – Michiel 2012-03-22 14:13:21

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请求中发送的所有头文件。一种猜测是,用户代理可能正在发挥作用。

+0

感谢您提供这个有价值的答案。所以,请求很好,因为它是不合作的服务器,对吧? – Michiel 2012-03-22 14:18:49

相关问题