2012-03-22 74 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。我將很快發佈代碼。