簡體   English   中英

HP ALM REST API使用Curl和PHP使用PUT方法發送xml數據

[英]HP ALM REST API send xml data using PUT method using Curl & PHP

我正在嘗試通過CurlPHP使用REST API更新ALM中的測試數據。

Step 1 : Check Lock Status => GET method | response => UNLOCKED

Step 2 : Acquire Lock => POST method | response <entity data XML>

Step 3 : Check Lock Status => GET method | response LOCKED_BY_ME

Step 4 : Checkout Versions | Optional

Step 5 : Update data => PUT method | response = http_code = 200 OK

可以正常工作直到第3步,請跳過第4步。

我成功直到第3步,我得到的響應為LOCKED_BY_ME 步驟4我跳過了,因為我們沒有版本控制概念。 其中,在第5步中,當我綁定發送xml數據時,出現錯誤415 (Unsupported Media) ,我相信這是因為ALM服務器無法識別我正在發送的數據。 我通過發送為“ Associative array/XMl/JSON ”來進行嘗試,但對於所有狀態代碼我都為415。

這是我的代碼。

$url="http://{Host:port}/qcbin/rest/domains/{domainname}/projects/{Projectname}/tests/{id}/lock";

function update_tests()
{

    $qc=$this->curl_auth();
    $headers = array("DELETE /HTTP/1.1","Content-Type:text/xml");
curl_setopt($qc, CURLOPT_TIMEOUT, $timeout);
curl_setopt($qc, CURLOPT_URL, $url);
    curl_setopt($qc, CURLOPT_RETURNTRANSFER, true);
curl_setopt($qc, CURLOPT_COOKIESESSION, true);
curl_setopt($qc, CURLOPT_COOKIEJAR,BASEPATH .'cookie.txt');
$res_unlock=curl_exec($qc);
    $resp=curl_getinfo($qc);

    $xml=simplexml_load_string(curl_exec($qc));

    if($xml->LockStatus == 'LOCKED_BY_OTHER' || $xml->LockStatus == 'LOCKED_BY_ME')
{
    $headers = array(
        'Accept: application/xml',
        'Content-Type: application/xml',
    );

    $data= <<<XML
<Entity Type="test">
<Fields>
<Field Name="Name">
<Value>Name of the test</Value> 
</Field>
<Field Name="Status">
<Value>Updated Value</Value>
</Field>
</Fields>
</Entity>
XML;

        curl_setopt($qc, CURLOPT_URL, $url);
        curl_setopt($qc, CURLOPT_HTTPHEADER, $header);
    curl_setopt($qc, CURLOPT_HEADER, 1);
    curl_setopt($qc, CURLOPT_PUT, 1);
    curl_setopt($qc, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($qc, CURLOPT_POSTFIELDS, $data);
    curl_setopt($qc, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($qc);
    $resp=curl_getinfo($qc);
}
else
{
        $data='';
        curl_setopt($qc, CURLOPT_URL, $url);

    curl_setopt($qc, CURLOPT_HEADER, true);
    curl_setopt($qc, CURLOPT_POST, 1);
    curl_setopt($qc, CURLOPT_POSTFIELDS, $data);
    $res_Lock=curl_exec($qc);
        $resp=curl_getinfo($qc);

        if($resp['http_code'] == 200)
        {
        $headers = array(
           'Accept: application/xml',
           'Content-Type: application/xml',
        );


        $file = BASEPATH."tests.xml";
        $data= <<<XML
<Entity Type="test">
<Fields>
<Field Name="Name">
<Value>Name of the test</Value> 
</Field>
<Field Name="Status">
<Value>Updated Value</Value> 
</Field>
</Fields>
</Entity>
XML;

           curl_setopt($qc, CURLOPT_URL, $url);
               curl_setopt($qc, CURLOPT_HTTPHEADER, $header);
           curl_setopt($qc, CURLOPT_HEADER, 1);
           curl_setopt($qc, CURLOPT_PUT, 1);
           curl_setopt($qc, CURLOPT_CUSTOMREQUEST, "PUT");
           curl_setopt($qc, CURLOPT_POSTFIELDS, $data);
           curl_setopt($qc, CURLOPT_RETURNTRANSFER, 1);
           $result = curl_exec($qc);
           $resp=curl_getinfo($qc);
        }
    }
}

我收到415 Error ,我無法使用PUT方法發送數據。 感謝您的幫助。

謝謝

在上面,看起來您的HTTP標頭在變量$ headers中,但是您正在從$ header設置HTTP標頭的curl選項。

今天,我一直在努力解決HP ALM的類似問題。 當我100%確定設置了以下標頭時,一切都開始正常工作:

內容類型:application / xml接受:application / xml

要使HP ALM界面正常工作,似乎有三件事:

  1. 網址-顯然
  2. http標頭-幾乎不夠好
  3. 有效載荷-從上面看起來正確

文檔https://almelsevier.saas.hp.com/qcbin/Help/doc_library/api_refs/REST/webframe.html差不多可以通過。

您應該將CURLOPT_INFILE與PUT操作配合使用。 POSTFIELDS用於POST操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM