Troubleshooting with Zend XML RPC
Zend has a wonderful XML RPC library built into their framework. You create a class with member functions that are accessible via RPC. It even uses heredoc syntax for the typing of parameters. All you have to do is register the class with the XML RPC server and it automagically works.
Unless it doesn’t. Which is where the hard part comes in. As a client there’s no way to see the raw HTTP response from the server. You can grab the Zend_Http_Client from the Zend_XmlRpc_Client. This will give you access to
Zend_Http_Client->raw_post_data
which is how Zend_XmlRpc_Client sends the request. The response however, is much harder to get. When Zend_XmlRpc_Client receives a response it uses a Zend_Http_Response, but it’s never stored. It passes the data over to a Zend_Xml_Response and returns that. Which is great if the page is valid XML. But if PHP throws an exception or you just want to look at the raw HTTP it’s gone. To get around this I added a variable to the Zend_XmlRpc_Client to store the Zend_Http_Response before it’s destroyed. Then added in a function to return it and voila. To check the raw response you just have to
Zend_XmlRpc_Client->getLastHttpResponse()->getBody()