HP ALM REST API使用Curl&;使用PUT方法发送xml数据;PHP

HP ALM REST API使用Curl&;使用PUT方法发送xml数据;PHP,php,xml,rest,curl,Php,Xml,Rest,Curl,我试图通过Curl&PHP使用restapi更新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

我试图通过
Curl
&
PHP
使用
restapi
更新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
我收到
415错误
,无法使用
PUT
方法发送数据。 谢谢你的帮助


感谢您在上面的介绍,您的HTTP头似乎位于变量$headers中,但您正在从$header为HTTP头设置curl选项

我今天一直在努力解决HP ALM的类似问题。当我100%确定设置了以下标题时,一切都开始正常工作:

内容类型:application/xml 接受:应用程序/xml

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

  • 网址-显然
  • http头-几乎不够好
  • 有效载荷-从上面看是正确的

  • 文档基本上还可以通过。

    您应该将CURLOPT_infle与PUT操作一起使用。POSTFIELDS是一个POST操作。

    请进一步解释/扩展您的答案。
    $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);
            }
        }
    }