我正在尝试向salesforce“api”发帖。
但是它只接受明确设置为"application/x-www-form-urlencoded"
当我这样做时:
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' => 'my.email@gmail.com',
'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 :(得分:1)
当CURLOPT_POST
为true
时,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,