2012-03-22 78 views
0

嗨,我需要在bugzilla中使用bugzilla webservices和php创建一个bug。我不想使用任何其他库(例如zend,nusoap等),因为我的老板希望它使用严格的php soapclient。经过几天的尝试后,我无法完成工作。我希望你们能帮助我。我第一次成功使用http://code.google.com/p/bugzillaphp/的课程。但是,当我们升级到新的bugzilla(4.2),并且该类使用xmlrpc请求而不是web服务。所以它失败了。我正在粘贴代码,肥皂请求和响应。请帮助我们。使用php soapclient的Bugzilla webservices - 错误 - 错误的版本

<?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 

回答

0

感谢“萨斯”,但我想通了。我得出结论,因为bugzilla webservices是使用xmlrpc服务器(xmlrpc.cgi)(不是soap服务器)实现的,所以我们不能使用php soapclient来调用这些服务。我在phpxmlrpc.sourceforge.net上使用了xmlrpc client for php来实现客户端脚本来调用bugzilla webservices。我将很快发布代码。