好吧n00b這裏用SOAP,如何在PHP中獲取SOAP帖子?
想了解一下如何使用SOAP。
問:
我有一個Java JSP是職位WSDL(貌似XML格式)到我的PHP腳本,但我如何得到這個在PHP腳本? WSDL的URL每次都會有所不同。
我敢肯定它非常簡單,但只是看不清楚我是怎麼理解的?
好吧n00b這裏用SOAP,如何在PHP中獲取SOAP帖子?
想了解一下如何使用SOAP。
問:
我有一個Java JSP是職位WSDL(貌似XML格式)到我的PHP腳本,但我如何得到這個在PHP腳本? WSDL的URL每次都會有所不同。
我敢肯定它非常簡單,但只是看不清楚我是怎麼理解的?
你可以嘗試這樣的事情:
try { if (!($xml = file_get_contents('php://input'))) { throw new Exception('Could not read POST data.'); } } catch (Exception $e) { print('Did not successfully process HTTP request: '.$e->getMessage()); exit; }
這將讀取POST請求$ xml變量的身體,如果有一個打印錯誤。
您的意思是JSP將POST請求中的WSDL發送給PHP腳本? 如果是這樣,看看$ _POST數組。如果您確切地指定JSP如何發送它,我可以幫助您更多。
無論如何,一旦你在你的PHP腳本中的一個變量中有WSDL url,你可以使用SoapClient類。
是的,這是我在談論的路線,所以也許我可以只是消耗RAW文章並解析它呢? – 2009-09-04 15:04:02
假設最好的情況:
$soapClient = new SoapClient($wsdlUrl, $soapOptions);
$soapClient->callYourMethod();
但你很可能會使用SOAP時打了很多的磚牆。這是documentation for SoapClient。
編輯:
因此,WSDL是POST-ED。然後,如果將XML字符串作爲HTTP主體發送,則可以使用$HTTP_RAW_POST_DATA
,如果XML字符串作爲多部分請求的一部分發送,則可以通過使用超全局$_FILES
來訪問它。
事情是這樣的:
$wsdl = $HTTP_RAW_POST_DATA;
$wsdlUrl = 'data:text/xml;base64,' . base64_encode($wsdl);
$soapClient = new SoapClient($wsdlUrl);
無論如何,如果php.ini always_populate_raw_post_data
被打開$HTTP_RAW_POST_DATA
纔可用。此外,如果請求是多部分,則忽略此設置,但未填充$HTTP_RAW_POST_DATA
,但您可以使用$_FILES
訪問已發佈的零件。而且,你的確可以使用php://input
而不是$HTTP_RAW_POST_DATA
。
另外,data URIs只能在php.ini中打開allow_url_fopen
時使用。
但我如何獲得$ wsdlUrl?這是什麼改變每次我需要PHP腳本處理 – 2009-09-04 15:04:42
這裏的URL包含數據本身:URL協議不是http,而是數據。如果SoapClient類處理這個,那麼這是最好的解決方案。 – gnud 2009-09-04 16:58:58
從未見過這個「php://輸入」,這是否讀取RAW文章數據? – 2009-09-04 15:05:37
感謝這很好的工作 – 2009-09-04 15:36:25