我正在对需要OAuth 2.0授权的REST服务执行POST请求。
在Postman中,一切都运行得很好,因为启用了“Follow Authorization header”选项,所以auth header在重定向后会被保留。但是,我不知道PHP中CURL请求的该属性的等效属性。因此,我仍然得到以下错误:“会话已过期或无效”。
有没有人知道如何在PHP cURL中进行重定向后成功地保留auth头?
这是我的php代码:
$token = $this->getToken();
$url = "XXX";
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ' . $token,
'Content-Type: application/json'
,
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
'client_id' => 'XXX',
'client_secret' => 'XXX',
'username' => 'XXX',
'password' => 'XXX',
'grant_type' => 'password',
'redirect_uri' => 'XXX'
)))
));
$response = curl_exec($curl);
var_dump('TOKEN: ' . $token);
var_dump($url);
var_dump(curl_getinfo($curl));
if (curl_errno($curl)) {
var_dump('Error:' . curl_error($curl));
} else {
var_dump("SUCCESS! ");
var_dump($response);
}
1条答案
按热度按时间sdnqo3pr1#
您无法执行此操作:
您已经执行此操作:
Content-Type: application/x-www-form-urlencoded
如果您想保留Content-Type:应用程序/json。
当您为POSTFIELDS使用数组时,curl将使用
Content-Type: application/x-www-form-urlencoded
覆盖内容类型我有时会将
file_get_content()
与上下文一起使用。这是一个简单的方法(没有SSL),以获得标题和张贴数据的权利。
请记住,
file_get_content()
与curl有一些相同的特性。上下文有file_get_content()
,它填充了Body。