[英]PHP cURL, POST JSON getting error in php curl
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"firstname":"Mike","lastname":"Doel","customer_id":"12345","email":"test_api_user@gmail.com.com"}' -u API-key: APIURL(http://)
above statement is running well in command but i am unable to achive the same by php code below is my code 上面的语句在命令中运行良好,但是我无法通过php代码达到相同的效果,下面是我的代码
$url="https://apiurl";
$data=array("firstname"=>"Mike","lastname"=>"Doel","customer_id"=>"12345","email"=>"test_api_user@gmail.com");
$data_json=json_encode($data);
//Curl code
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json',"Accept: application/json","api-key"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
This: 这个:
curl_setopt($ch, CURLOPT_HTTPHEADER, array([..snip..], "api-key"));
^^^^^
and 和
curl [..snip..] -u api-key
^^^^^^^^^^
are NOT equivalent. 是不等效的。
-u
specifies HTTP Basic authentication, with username:password
. -u
指定HTTP基本身份验证,并使用username:password
。 Your setopt is just stuffing that username as the NAME of an http header, which is not how basic auth credentials show up 您的setopt只是将该用户名填充为HTTP标头的名称,这不是基本身份验证凭据显示的方式
You should have 你应该有
curl_setopt($ch, CURLOPT_USERNAME, "api-key");
instead. 代替。
In CURL, for api key you need to pass username:password , if you going to access in php code
$url="https://apiurl";
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => 'username:password',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 300000,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"content-type: application/json"
),
CURLOPT_POSTFIELDS => $postfields,
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
return $response;
Try it once..hopefully it will work for you. 尝试一次。.希望它对您有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.