使用php-soapclient的Bugzilla Web服务-错误-错误版本


Bugzilla webservices using php soapclient - Error - wrong version

hi我需要使用bugzilla Web服务和php在bugzila中创建一个bug。我不想使用任何其他库(例如zend、nusoap等),因为我的老板希望它严格使用php-soapclient。经过几天的努力,我还是没能成功。我希望你们能帮助我。我第一次成功地使用了http://code.google.com/p/bugzillaphp/。然而,当我们升级到新的bugzilla(4.2)时,该类使用的是xmlrpc请求,而不是webservice。所以它失败了。我正在粘贴代码、soap请求和响应。伙计们,请帮帮我。

<?php
$user = 'your email address';
$pass = 'your password';
$uri = 'http://your site/xmlrpc.cgi';       
$client = new SoapClient(NULL,
                                       array('location' => $uri,
                                            'uri'     => $uri,
                                            'trace' => 1,
                                            'soap_version' => SOAP_1_2,
                                             'action' => ""
                                            //'exceptions' => 0
));
try
{
 $result = $client->__soapCall("User.login", array(
            'login'          => $user,
            'password'       => $pass,          
            'remember'  => 'true'
            ));
print $result;                  
}
catch (Exception $e)
 {
        print $e->getMessage();
    echo "REQUEST:'n" . $client->__getLastRequest() . "'n";
    echo "Response:'n" . $client->__getLastResponse() . "'n";
    echo "REQUEST HEADERS:'n" . $client->__getLastRequestHeaders() . "'n";
    echo "RESPONSE HEADERS:'n" . $client->__getLastResponseHeaders() . "'n";
print_r($headers);      
$headers = str_replace("application/soap+xml", "text/xml", $headers);
print_r($headers);  
 }
?>
     xml request and response, xml request headers and response headers:-
REQUEST:
 <?xml version="1.0" encoding="UTF-8"?>
 <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="htt
p://devbugz/xmlrpc.cgi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/
soap-encoding"><env:Body><ns1:User.login env:encodingStyle="http://www.w3.org/20
03/05/soap-encoding"><param0 xsi:type="xsd:string">your email</param0><par
am1 xsi:type="xsd:string">your password</param1><param2 xsi:type="xsd:string">true</p
aram2></ns1:User.login></env:Body></env:Envelope>
Response:
<?xml version="1.0" encoding="UTF-8"?><methodResponse><fault><value><struct><mem
ber><name>faultString</name><value><string>Application failed during request des
erialization: 32612: When using XML-RPC, you cannot send data as application/soa
p+xml; charset=utf-8; action="http://devbugz/xmlrpc.cgi#User.login". Only text/x
ml and application/xml are allowed. at F:/applications/ActiveState/Perl/v5.10.0/
site/lib/SOAP/Lite.pm line 2778.
</string></value></member><member><name>faultCode</name><value><string>Client</s
tring></value></member></struct></value></fault></methodResponse>
REQUEST HEADERS:
POST /xmlrpc.cgi HTTP/1.1
Host: devbugz
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.3.9
Content-Type: application/soap+xml; charset=utf-8; action="http://yoursite/xmlrpc
.cgi#User.login"
Content-Length: 569

RESPONSE HEADERS:
HTTP/1.1 200 OK
Date: Thu, 22 Mar 2012 21:08:56 GMT
Server: Apache/2.2.19 (Win32) mod_auth_sspi/1.0.4 PHP/5.2.6 DAV/2 SVN/1.6.15 mod
_ssl/2.2.19 OpenSSL/0.9.8r
SOAPServer: SOAP::Lite/Perl/0.714
Content-Length: 578
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/xml

Bugzilla中已知的错误:https://bugzilla.mozilla.org/show_bug.cgi?id=731219

你可以更新你的Bugzilla,也可以用上面网站上提供的补丁进行补丁。

或者你可以用这个答案https://stackoverflow.com/a/1688239/1050577并将您的soap客户端版本更改为soap_1_1。

谢谢"sas",但我想明白了。我得出的结论是,由于bugzilla Web服务是使用xmlrpc-server(xmlrpc.cgi)(而不是soap服务器)实现的,因此我们不能使用php-soapclient来调用这些服务。我使用phpxmlrpc.sourceforge.net上提供的xmlrpc-client-for-php来实现调用bugzilla Web服务的客户端脚本。我很快就会发布这方面的代码。