2014-03-06 113 views
0

下面是一個沒有CURLOPT_HTTPHEADER的例子,它工作正常。PHP Curl - 知道內容類型

<?php 
$URL = "http://someurl.info"; 
$data = 'x_test_request=0&x_version=3.1&x_delim_data=true&x_relay_response=false'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $URL); 
curl_setopt($ch, CURLOPT_TIMEOUT, 1800); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
$response = curl_exec($ch); 

?> 

Curl會自動檢測我們發佈的數據類型,並自動計算字符串長度嗎? 或者我們應該總是指定Both?

還是很大程度上取決於目的地的規則和期望?

爲了安全起見,我通常添加的頭信息是這樣的:

<?php 
$contentlen = strlen(trim($data)); 
$headersARR = array(
     "Content-type: application/x-www-form-urlencoded", 
       "Content-length: ".$contentlen, 
     ); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headersARR); 
?> 

我讀http://us1.php.net/curl_setopt,但沒有注意到在默認的內容類型參數的任何細節。

回答

0

如果您沒有指定關於Content-type的任何內容,但使用CURLOPT_POSTFIELDS,那麼標頭總是默認爲Content-type: application/x-www-form-urlencoded。它也自動設置Content-length:

因此,當我們通過POST發佈JSON內容時,我們需要覆蓋content-typeHTTPHEADER選項。它類似於XML或任何其他特定類型的內容。

+0

這基本上是我期望聽到的,但不得不問 – coffeemonitor