Reputation: 3
I'm trying to make a post request to salesforce "api".
however it accepts only content type which is explicitly set to "application/x-www-form-urlencoded"
When I do this:
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);
The response headers content-type is always:
"text/html;charset=UTF-8"
The same parameters I send using postman (with the correct header) actually works.
Upvotes: 0
Views: 528
Reputation: 12776
When CURLOPT_POST
is true
, curl sets Content-Type
of the request to application/x-www-form-urlencoded
automatically; you don't need to do that manually.
You can verify that (as well as check all other "outgoing" headers) by setting CURLINFO_HEADER_OUT
to true
prior to your request, then checking the array returned by curl_getinfo()
.
I suspect your problem has nothing to do with the request headers but with how curl handles https. Setting these in your curl_setopt_array()
should help:
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => 2,
Upvotes: 1