繁体   English   中英

没有得到预期的PHP cURL响应

[英]Not getting expected PHP cURL response

我有以下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;
?>

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

{“错误”:“ invalid_request”,“错误描述”:“缺少表单参数:grant_type”}

当使用在线cURL工具(如https://onlinecurl.com)时 ,其数据(URL,标头,数据)与我的cURL PHP代码中的数据相同时,我将获得正确的响应。 这意味着我的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代码。 如果代码正常工作,您应该得到以下响应:

{“错误”:“ invalid_grant”,“错误描述”:“无效的用户凭据”}

按照手册,您的请求需要具有application/x-www-form-urlencodedContent-Type ,如下所示:

key1=value1&key2=value2

因此,您需要手动或使用http_build_query将数组转换为这样的字符串,如下所示:

$data_string = http_build_query( $data );

我正在使用以下PHP CURL使用一种API,请尝试一下并在“您的用户名”和“您的密码”中传递您的凭据(即用户名和密码)。

<?php
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.sipgate.com/login/sipgate-apps/protocol/openid- 
connect/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\r\n\client_id:\"sipgate-app- 
web\",\r\n\tgrant_type\"password\",\r\n\tusername:\"your 
username\",\r\n\tpassword:\"your password\"\r\n}",
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
"Content-Type: application/json"
),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
} ?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM