猿问

没有得到预期的 PHP cURL 响应

我有以下 PHP 代码:


<?php

$data = array("client_id" => "sipgate-app-web", "grant_type" => "password", "username" => "my_username", "password" => "my_password");

$data_string = json_encode($data);


$ch = curl_init('https://api.sipgate.com/login/sipgate-apps/protocol/openid-connect/token');

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(

'Content-Type: application/x-www-form-urlencoded',

'Accept: application/json'

));


$result = curl_exec($ch);


echo $result;

?>

不幸的是,我没有得到预期的回应。我收到的回复是:


{"error":"invalid_request","error_description":"缺少表单参数:grant_type"}


当使用像https://onlinecurl.com这样的在线 cURL 工具和我的 cURL PHP 代码中相同的数据(URL、标题、数据)时,我得到了正确的响应。这意味着,我的 PHP 代码有问题。我在 PHP 错误日志中没有收到任何错误。


手册说我必须使用以下 cURL 代码:


 curl \

--request POST \

--header 'Content-Type: application/x-www-form-urlencoded' \

--header 'Accept: application/json' \

--data-urlencode "client_id=sipgate-app-web" \

--data-urlencode "grant_type=password" \

--data-urlencode "username=my_username" \

--data-urlencode "password=my_password" \

https://api.sipgate.com/login/sipgate-apps/protocol/openid-connect/token

由于我是 cURL 的新手,在谷歌搜索了很多之后,我不知道我做错了什么。


有谁能够帮助我?


编辑:您可以按原样测试我上面的 PHP 代码。如果代码正常工作,您应该得到以下响应:


{"error":"invalid_grant","error_description":"无效的用户凭据"}


慕尼黑5688855
浏览 137回答 2
2回答

手掌心

按照说明书,你的要求需要有Content-Type的application/x-www-form-urlencoded,看起来像这样:key1=value1&key2=value2因此,您需要手动或使用 将数组转换为这样的字符串http_build_query,如下所示:$data_string&nbsp;=&nbsp;http_build_query(&nbsp;$data&nbsp;);
随时随地看视频慕课网APP
我要回答