2009-09-24 51 views
0

因此,設法破解讓nusoap輪詢chemspider服務器的信息,但是我得到的響應將使用print_r顯示,但使用print時將只顯示Array。如何解析這個響應從nusoap到一個php變量/數組

我的問題是真的,我怎麼走給出響應,並把它變成一個PHP陣列

爲的NuSOAP客戶

<?php 
require_once('../lib/nusoap.php'); 
$client = new nusoap_client('http://www.chemspider.com/Search.asmx?WSDL', 'wsdl'); 
$err = $client->getError(); 
if ($err) { 
    echo '<h2>Constructor error</h2><pre>' . $err . '</pre>'; 
} 
$query = 'methanol'; 
$token = 'token'; 
$result = $client->call(SimpleSearch, array('query' => $query, 'token' => $token), array('return' => 'xsd:string'), "http://www.chemspider.com/SimpleSearch") ; 
// Check for a fault 
if ($client->fault) { 
    echo '<h2>Fault</h2><pre>'; 
    print_r($result); 
    echo '</pre>'; 
} else { 
    // Check for errors 
    $err = $client->getError(); 
    if ($err) { 
    // Display the error 
    echo '<h2>Error</h2><pre>' . $err . '</pre>'; 
} else { 
    // Display the result 
    echo '<h2>Result</h2><pre>'; 
    print_r($result); 
    echo '</pre>'; 
} 
} 



echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>'; 
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>'; 
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>'; 
?> 

這讓下面的輸出的代碼(減去調試信息):

Result 

Array 
(
    [SimpleSearchResult] => Array 
     (
      [int] => 864 
     ) 

) 

Request 

POST /Search.asmx HTTP/1.0 
Host: www.chemspider.com 
User-Agent: NuSOAP/0.7.3 (1.114) 
Content-Type: text/xml; charset=ISO-8859-1 
SOAPAction: "http://www.chemspider.com/SimpleSearch" 
Content-Length: 489 

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns8284="Array"><SOAP-ENV:Body><SimpleSearch xmlns="http://www.chemspider.com/"><query>methanol</query><token>token</token></SimpleSearch></SOAP-ENV:Body></SOAP-ENV:Envelope> 

Response 

HTTP/1.1 200 OK 
x-cspc-fd: search.asmx 
x-cspc-fh: chemspider 
x-orig-path: /Search.asmx 
Set-Cookie: x-dsp= 
Set-Cookie: x-d-ond=dond 
Set-Cookie: X-Mapping-kckcchol=47DE43E9D82204D9CDBBD4A2610306B8; path=/ 
Cache-Control: private, max-age=0 
x-cspc-pl: 0 
Content-Length: 381 
x-cspc-hs: chemspider.com 
Date: Thu, 24 Sep 2009 08:54:01 GMT 
x-bwcc: pub 
x-dsp: [][] 
Connection: close 
X-AspNet-Version: 2.0.50727 
x-cspc-pt: /Search.asmx 
Z-Spider: Hunstman-32-1 
x-orig-host: chemspider.com 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
Content-Type: text/xml; charset=utf-8 

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><SimpleSearchResponse xmlns="http://www.chemspider.com/"><SimpleSearchResult><int>864</int></SimpleSearchResult></SimpleSearchResponse></soap:Body></soap:Envelope> 
+0

你的問題看起來不對。你已經有了一個完美可用的數組,即$ result。你的問題似乎是「爲什麼當我echo $ result;?」時輸出數組''。看到我下面給出的答案。 – Duroth

+0

確實。我只是無法理解是什麼導致問題 –

回答

0

在您使用的腳本中,響應已經被解析爲名爲$ result的PHP數組。您已經在輸出中打印了數組。

就我所知,你的問題是print()和echo()在數組上不能很好地工作。他們只是輸出類型(數組)而不是內容。

您可以致電與

print $result['simpleSearchResult']['int'] // Will display 864 

你可以閱讀更多的PHP的數組中的PHP Manual處理上的$輸出結果。

0

你想解析$ client-> response?嘗試爆炸('\ n',$ client-> response)並爆炸(':',$ each_string)

+0

謝謝你的建議,儘管事實證明,下面的建議解決了問題。 很多感謝您嘗試雖然 –