2014-09-30 37 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