ALM SaaS REST API 12.50 在 PHP 中不工作

ALM SaaS REST API 12.50 not working in PHP

我已尝试使用 PHP 中的以下代码从 ALM 获取缺陷详细信息,但在浏览器中未显示任何响应。 但同样适用于 POSTMAN 。有人可以帮我吗

这是 REST 的文档 API USAGE REST DOCUMENT FROM ALM

我已经尝试过 Whosebug 的现有帖子

  1. HP ALM REST API login using PHP CURL
  2. ALM REST API v12.50 error 401

没有任何帮助所以发布了一个新问题

注意:出于安全目的 header 值保留为编码值

 <?php

    $curl = curl_init();

    curl_setopt_array($curl, array(
      CURLOPT_URL => "https://hostname/qcbin/api/domains/domainname/projects/projectname/defects/?limit=10",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "GET",
      CURLOPT_HTTPHEADER => array(
        "authorization: Basic encoded value",
        "cache-control: no-cache",
        "postman-token: a8a2398d-7a0a-0ebd-a586-58a40e524a9a"
      ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }
?>

我终于找到了解决方案,下面是方法

首先,我们需要从 ALM 身份验证 link 获取 LWSSO_COOKIE_KEY、QCSession、ALM_USER、XSRF_TOKEN 值,然后我们应该将这些值用于后续调用

下面是通过输入 ALM 凭证获取缺陷列表的完整工作代码

        <?php
        $curl = curl_init();
        Header('Content-type: application/json');
        $credentials = "username:password";
        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://host:port/qcbin/api/authentication/sign-in",
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HEADER => 1,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => array(
                "authorization: Basic " . base64_encode($credentials) ,
                "cache-control: no-cache"
            ) ,
        ));
        $response = curl_exec($curl);
        $err = curl_error($curl);
        curl_close($curl);

        if ($err)
            {
            echo "cURL Error #:" . $err;
            }
          else
            {

            // If there is no error then get the response to form the array of headers to get the different values required

            $array_start = explode(';', $response);
            foreach ($array_start as $key => $value) {
    $remove_from_string = ['HTTP/1.1 200 OK','Path=/','HTTPOnly','HttpOnly','Content-Length',': 0'];
    $replace_array = ['','','','','',''];
    $value = str_replace($remove_from_string,$replace_array,$value);
    $value = trim(preg_replace(('/Expires: [a-zA-Z]+, [0-9]+ [a-zA-Z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+ [a-zA-Z]+/'), '', $value));
    $value = trim(preg_replace(('/Server: [a-zA-Z0-9.\(\)]+/'),'',$value));
    if (!empty($value)) {
        $almheaders[trim(explode('=',$value)[0])] = explode('=',$value)[1];
    }
}
            $LWSSO_COOKIE_KEY = $almheaders['Set-Cookie: LWSSO_COOKIE_KEY'];
            $QCSession = $almheaders['Set-Cookie: QCSession'];
            $ALM_USER = $almheaders['Set-Cookie: ALM_USER'];
            $XSRF_TOKEN = $almheaders['Set-Cookie: XSRF-TOKEN'];

            // Now form the Cookie value from the above values.

            $cookie = "Cookie: JSESSIONID=33eyr1y736486zcnl0vtmo12;XSRF-TOKEN=$XSRF_TOKEN;QCSession=$QCSession;ALM_USER=$ALM_USER;LWSSO_COOKIE_KEY=$LWSSO_COOKIE_KEY";

            // echo $cookie;

            $curl = curl_init();
            Header('Content-type: application/json');
            curl_setopt_array($curl, array(
                CURLOPT_URL => "https://host:port/qcbin/api/domains/CET_NTD/projects/BILLING_OPERATIONS/defects",

                // CURLOPT_RETURNTRANSFER => true,

                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HEADER => 0,
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "GET",
                CURLOPT_HTTPHEADER => array(
                    "authorization: Basic " . base64_encode($credentials) ,
                    "cache-control: no-cache",
                    "Accept: application/json",
                    $cookie
                ) ,
            ));
            $response = curl_exec($curl);
            $err = curl_error($curl);
            curl_close($curl);
            if ($err)
                {
                echo "cURL Error #:" . $err;
                }
              else
                {
                echo $response;
                }
            }
    ?>