PHP, cURL - вход в API (требуется параметр запроса 'password') - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь войти в API со следующим кодом

<?php
header('Content-type: application/json; charset=utf-8');
error_reporting(E_ALL);
ini_set('display_errors', '1');
$id = $_POST["id"]; 
$id2 = $_POST["id2"];               
// URL to fetch
$url = "https://bpk.bs.picturemaxx.com/api/v1/user/login";
// Setting the HTTP Request Headers
$User_Agent = 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';

$request_headers[] = 'X-picturemaxx-api-key: Key';
$request_headers[] = 'Content-Length:0';
$request_headers[] = 'Expect:  ';
$request_headers[] = 'Authorization: Bearer token';

$username = "$id";
$password = "$id2";

$ch = curl_init($url);
// Set the url
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_USERAGENT, $User_Agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);

// Execute
$result = curl_exec($ch); // Performs the Request, with specified 
curl_setopt() options (if any).
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// Closing
curl_close($ch);
?>

Когда я запускаю этот код, все, что я получаю, это «Требуется параметр запроса« пароль »».Пример тела для входа на сайт API выглядит следующим образом

{
  "password": "string",
  "username": "string"
}

, а пример CURL выглядит следующим образом

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'X-picturemaxx-api-key: key' -d '{ \ 
   "password": "pwd", \ 
   "username": "usrname" \ 
 }' 'https://bpk.bs.picturemaxx.com/api/v1/user/login'

Как мне использовать тело примера в PHP Curlиспользовать пароль, чтобы логин работал?Как я могу продолжать использовать токен, созданный при входе в систему?

Спасибо за решения

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я смог решить проблему.Вот мой код, если у кого-то есть подобные трудности

<?php
            header('Content-type: text/html; charset=utf-8');

                // URL to fetch
                $url = "https://bpk.bs.picturemaxx.com/api/v1/user/login";
            // Setting the HTTP Request Headers
                $User_Agent = 'Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0';

                $request_headers[] = 'X-picturemaxx-api-key: key';
                $request_headers[] = 'Contect-Type:text/html';
                $request_headers[] = 'Accept:text/html';
                $request_headers[] = 'Accept: application/json';
                $request_headers[] = 'Content-type: application/json';
                $request_headers[] = 'Accept-Encoding:  gzip, deflate, identity';
                $request_headers[] = 'Expect: ';                   

                $dataj = array (
  'password' => 'passwd',
  'username' => 'usrname',
);
                 $data_json = json_encode($dataj);
                 $request_headers[] = 'Content-Length: ' . strlen($data_json);


              $ch = curl_init($url);
              // Set the url      

        curl_setopt( $ch, CURLOPT_URL, $url );
        curl_setopt($ch, CURLOPT_USERAGENT, $User_Agent);
                curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_ENCODING, "");

                // Execute
                $result = curl_exec($ch);
              $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 // Performs the Request, with specified curl_setopt() options (if any).
                //$data = json_decode( file_get_contents( 'php://input' ), true );

                // Closing
        curl_close($ch);
$data = json_decode($result, true);
if ($code == 200) {
    $result = json_decode($result, true);
    print_r($result);
} else {
    echo 'error ' . $code;
}

print_r($result);
print_r($data);         

?>

С этим написанием это работает сейчас.

$dataj = array (
  'password' => 'passwd',
  'username' => 'usrname',
);

Другая ошибка заключалась в том, что я использовал $ data_json в заголовке перед его инициализацией.

$data_json = json_encode($dataj);
                 $request_headers[] = 'Content-Length: ' . strlen($data_json);
0 голосов
/ 05 октября 2018

Я не вижу, куда ставят имя пользователя и пароль .Вы должны добавить данные в запрос cURL.

curl_setopt ($ ch, CURLOPT_POSTFIELDS, json_encode ($ data));

Где $ data - ваш массив с именем пользователяи пароль.А поскольку API ожидает данные json, используется json_encode.

...