У меня есть простой запрос curl на onelogin api, написанный на PHP. Запрос отлично работает с моими параметрами с моего терминала, и я могу войти в систему с моим пользователем, однако версия php, которую я запускаю на сервере, генерирует токен доступа, но затем дает ошибку 401, когда я пытаюсь выполнить любые запросы GET или POST. Ive пробовал всевозможные параметры завитка. Форма html отправляется на эту php-страницу, размещенную в стеке лампы. Кажется, не работает. Ниже приведен скрипт php с простым запросом GET. Будет очень признательна за любую помощь по этому:onelogin api с php curl 401 несанкционированный
<?php
//form will post these variables for post request
//$username = $_POST['uname'];
//$password = $_POST['pwd'];
$data = array("grant_type" => "client_credentials");
$data_string = json_encode($data);
$ch = curl_init('https://api.us.onelogin.com/auth/oauth2/token');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
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(
"Authorization: client_id:XXX, client_secret:XXX",
"Content-Type: application/json")
);
//execute post
$result = curl_exec($ch);
if(!curl_exec($ch)){
die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}
//parsse out bearer token and set header
$json = json_decode($result, true);
$a_token = $json['data'][0]['access_token'];
$bearer_token = "Authorization: bearer: ". $a_token;
curl_setopt($ch, CURLOPT_URL, "https://api.us.onelogin.com/api/1/users");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($bearer_token));
//execute
$result2 = curl_exec($ch);
if(!curl_exec($ch)){
die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}
//close connection
curl_close($ch);
echo $result2;
>
Hi John..thanks ... но это не исправить! – skyfullofstars
Тогда это проблема с кодировкой php, я предполагаю. На данный момент это больше похоже на ошибку кодирования, чем на проблему с API. Лучшая ставка будет а) проверить маркер носителя вы получаете обратно, просто чтобы убедиться, что в настоящее время анализируется правильно б) Создайте новый объект запроса для 2-го запроса, например, $ ch2 = curl_init ('https://api.us.onelogin.com/api/1/users'); Поскольку вы повторно используете первый запрос, он все равно может быть настроен на выполнение POST (эта вторая конечная точка является GET) и может быть загромождена другими вариантами, оставшимися после этого первого запроса. Лучше начать с чистого листа –
a) Да .. пробовал, что ... его разбирают и отправляют в следующую функцию правильно. b) Создал новый объект запроса $ ch2 ..... Обратите внимание, что это также не удается для моих запросов POST! ....... ни один не работал! – skyfullofstars