Types PHP CURL请求oauth2密码授予类型,内容类型为:application/x-www-form-urlencoded

Types PHP CURL请求oauth2密码授予类型,内容类型为:application/x-www-form-urlencoded,types,oauth-2.0,request,passwords,grant,Types,Oauth 2.0,Request,Passwords,Grant,我试图使用一个API,该API需要内容类型:application/x-www-form-urlencoded来发出令牌。下面的curl命令有效 curl -i \ -X POST \ -H 'Content-Type: application/x-www-form-urlencoded' \ -u SwVl97HRUgWHutJGzO1wt1JMjI5JVV62:SgnyQAA8ap0pPcFf \ -d 'grant_type=password&username=us

我试图使用一个API,该API需要内容类型:application/x-www-form-urlencoded来发出令牌。下面的curl命令有效

curl -i \
  -X POST \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -u SwVl97HRUgWHutJGzO1wt1JMjI5JVV62:SgnyQAA8ap0pPcFf \
  -d 'grant_type=password&username=user&password=pass' \
  https://api.test.com/identity/v1-sandbox/token
但是当用PHP发布请求时,即

$params = array(
  "client_id" => "SwVl97HRUgWHutJGzO1wt1JMjI5JVV62",
  "client_secret" => "SgnyQAA8ap0pPcFf",
  "username" => "user",
  "password" => "pass",
  "grant_type" => "password");

$curl = curl_init($endpoint);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HEADER,'Content-Type: application/x-www-form-urlencoded');
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, urlencode('user').':'.urlencode('pass'));

// Remove comment if you have a setup that causes ssl validation to fail
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$postData = "";

//This is needed to properly form post the credentials object
foreach($params as $k => $v)
{
   $postData .= $k . '='.urlencode($v).'&';
}

$postData = rtrim($postData, '&');

curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
echo "Performing Request...";

$json_response = curl_exec($curl);
//print_r($json_response);

print_r(curl_getinfo($curl));
API拒绝我的凭据。i、 e

 {
                    "code":"401.01.001",
                    "error":"unauthorized",
                    "message":"Unauthorized - Please check your credentials."
 }
当我检查curl请求头时,我发现内容类型更改为application/json,但我请求它使用application/x-www-form-urlencoded,即

[url] => https://api.test.com/identity/v1-sandbox/token
[content_type] => application/json
[http_code] => 401
[header_size] => 166
[request_size] => 314

有人遇到过上述问题吗?

要设置必须使用的标题:CURLOPT_HTTPHEADER

示例:

curl_setopt($curl, CURLOPT_HTTPHEADER,'Content-Type: application/x-www-form-urlencoded');

要设置标题,必须使用:CURLOPT_HTTPHEADER

示例:

curl_setopt($curl, CURLOPT_HTTPHEADER,'Content-Type: application/x-www-form-urlencoded');

经过一些分析,我意识到第一个生成了
授权:基本U3DWBDK3SFJVZ1DIDxRKR3PPMXD0MUPNAKK1SLZWNJI6U2DueffBqthHcDbWugNGZG=
,而第二个生成了
授权:基本dXNlcjpwYXNz
认为两者都使用base64编码。。。有想法的人请分享…没关系。。。正在使用curl_setopt($curl,CURLOPT_USERPWD,urlencode('user')。:'。urlencode('pass'));而不是curl_setopt($curl,CURLOPT_USERPWD,urlencode('swvl97hrugwhutjgzo1wt1jmji5jvvv62'):'。urlencode('SgnyQAA8ap0pPcFf')。。。。愚蠢的错误。。。我想我已经厌倦了经过一些分析,我意识到第一个生成了
授权:基本的u3dwbd3sfjvz1didxrkr3ppmxd0mupnakk1slzwnji6u2dueffbqthhcdbwugngzg=
,而第二个生成了
授权:基本的dXNlcjpwYXNz
认为两者都使用base64编码。。。有想法的人请分享…没关系。。。正在使用curl_setopt($curl,CURLOPT_USERPWD,urlencode('user')。:'。urlencode('pass'));而不是curl_setopt($curl,CURLOPT_USERPWD,urlencode('swvl97hrugwhutjgzo1wt1jmji5jvvv62'):'。urlencode('SgnyQAA8ap0pPcFf')。。。。愚蠢的错误。。。我想我累了