2014-09-30 60 views
0

我正在嘗試向salesforce「api」發出一個請求。 但它僅接受其中明確設置爲"application/x-www-form-urlencoded"php curl標題集目前

當我做這個內容類型:

curl_setopt_array($ch, array(
       CURLOPT_URL => 'https://www.salesforce.com/servlet/servlet.WebToLead', 
       CURLOPT_RETURNTRANSFER => 1, 
       CURLOPT_POST => 3, 
       CURLOPT_POSTFIELDS => json_encode(array (
         'first_name' => 'foo', 
         'last_name' => 'faa', 
         'email' => '[email protected]', 
         'oid' => '#hash', 
         'recordType' => '#hash' 
       )), 
       CURLOPT_HTTPHEADER=>array(
         'Content-type: application/x-www-form-urlencoded' 
       ) 
     )); 

     $data = curl_exec($ch); 
     $info = curl_getinfo($ch); 

的響應頭內容類型始終是: "text/html;charset=UTF-8"

我發送郵件使用相同的參數郵遞員(帶正確的標題)實際上有效。

+0

所以問題是你沒有從salesforce api使用上面的代碼得到任何迴應?你是否收到錯誤迴應?您能否提供您正在使用的salesforce文檔的鏈接? – thohl 2014-09-30 12:41:09

+0

nope。這是一個可怕的API,沒有提供任何反饋。我知道我的請求是否成功地轉到salesforce - >線索,並檢查是否實際創建了線索。我很確定問題在於Content-type頭。通過郵遞員,我可以成功發佈到salesforce。當我改變郵遞員的內容類型時,它也失敗了。 – 2014-09-30 12:51:53

回答

1

CURLOPT_POSTtrue時,curl將Content-Type的請求自動設置爲application/x-www-form-urlencoded;你不需要手動完成。 您可以通過在請求之前將CURLINFO_HEADER_OUT設置爲true來驗證(以及檢查所有其他「傳出」標題),然後檢查由curl_getinfo()返回的數組。

我懷疑你的問題與請求標題無關,但與curl如何處理https。在curl_setopt_array()中設置這些應該有幫助:

CURLOPT_SSL_VERIFYPEER => false, 
CURLOPT_SSL_VERIFYHOST => 2, 
+0

這是在改變之後我的請求: curl_setopt_array($ CH,陣列( \t CURLOPT_URL> 'https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8', \t CURLOPT_POST = >真, \t CURLOPT_RETURNTRANSFER =>真, \t CURLOPT_POSTFIELDS => json_encode($字段), \t CURLOPT_SSL_VERIFYPEER =>假, \t CURLOPT_SSL_VERIFYHOST => 2 )); 其中$ fields是一個數組。 但仍然curl_getinfo清晰的輸出顯示: CONTENT_TYPE: 「text/html的;字符集= UTF-8」 – 2014-09-30 13:10:59

+0

你說得對,雖然標題: 請求頭字符串確實是 - request_header:「POST /的servlet/servlet.WebToLead?encoding = UTF-8 HTTP/1.1 ↵主題:www.salesforce.com 接受:*/* 內容長度:235 內容類型:application/x-www-form-urlencoded – 2014-09-30 13:21:13

+0

我會將此標記爲正確的答案。即使我感到困惑,它也會回答標題問題:) – 2014-09-30 13:27:08