[英]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-urlencoded
的Content-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.