2012-03-22 151 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

相關問題