XMLRPC showing error -32601 (using PHP)

I have the following code ...

<?php include("lib/xmlrpc.inc"); $email=' whatever@hotmail.com '; $c=new xmlrpc_client("/register/index.php", "ws.myserver.com", 80); $f=new xmlrpcmsg('existsEmail', array(new xmlrpcval($email, "base64"))); print "<pre>" . htmlentities($f->serialize( )) . "</pre>"; $r=$c->send($f); $v=$r->value( ); if (!$r->faultCode( )) { print "Email is". $email . " is " . $v->scalarval( ) . "<br />"; print "<hr />I got this value back<br /><pre>" . htmlentities($r->serialize( )). "</pre><hr />\n"; } else { print "Fault: "; print "Code: " . $r->faultCode( ) . " Reason '" .$r->faultString( )."'<br />"; } ?> 

I need to use the WebService located at http://ws.myserver.com/register/index.php .

I pass the email as a parameter and then the XMLRPC.inc library will encode it using base64.

I have a nice XML request shown below:

 <?xml version="1.0"?> <methodCall> <methodName>existsEmail</methodName> <params> <param> <value><base64>dnJvZHJpZ3VlekBpY2NrLm5ldC5jbw==</base64></value> </param> </params> </methodCall> 

BUUUT, when I tried to get a response from the server, I should execute the following error:

Fault: Code: -32601 Reason 'server error. requested method not found'

Any ideas? I'm going crazy about calling the existsEmail method from my PHP code ... I'm sure it exists, but I don't know if I missed something.

+2
source share
1 answer

You receive an error message (specification for interacting with an error code, version 20010516) from the XMLRPC endpoint with which you are communicating.

This is a specific error code:

 -32601 ---> server error. requested method not found 

The RPC method you requested was not found by the server. Contact the support service that you consume for a list of all available methods. If this method should be available, contact support and discuss the problem with them.

You asked in a comment:

Is there a way to [check] which methods are available?

It depends on the service. In XMLRPC on sourceforge, there is a suggestion of certain methods that you can call to display information about available functions:

Introspection XML-RPC

  • system.listMethods
  • system.methodSignature
  • system.methodHelp

You can also try if it works with your service. AFAIK is a common thing, I gave a quick example, you will find the full code below. See also output under code.

 $path = 'http://xmlrpc-c.sourceforge.net/api/sample.php'; printf("\n XMLRPC Service Discovery\n\n for: '%s'\n\n", $path); $discovery = new Discovery($path); $methods = $discovery->getMethods(); printf(" Method Summary:\n ===============\n", count($methods)); foreach ($methods as $i => $method) { printf(" %'.-2d %s\n", $i + 1, $method->getName()); } printf("\n Method Details (%d):\n ===================\n", count($methods)); foreach ($methods as $i => $method) { printf(" %'.-2d %s\n", $i + 1, $method->getName()); printf("\n %s\n", $method); printf("\n%s\n\n", preg_replace('/^/um', ' ', wordwrap($method->getHelp(), 46))); } 

Output:

  XMLRPC Service Discovery for: 'http://xmlrpc-c.sourceforge.net/api/sample.php' Method Summary: =============== 1. debug.authInfo 2. sample.add 3. sample.sumAndDifference 4. system.listMethods 5. system.methodHelp 6. system.methodSignature Method Details (6): =================== 1. debug.authInfo <struct> debug.authInfo Report any HTTP authentication in use 2. sample.add <int> sample.add (<int>, <int>) Add two numbers 3. sample.sumAndDifference <struct> sample.sumAndDifference (<int>, <int>) Add and subtract two numbers 4. system.listMethods <array> system.listMethods (<string>) This method lists all the methods that the XML-RPC server knows how to dispatch 5. system.methodHelp <string> system.methodHelp (<string>) Returns help text if defined for the method passed, otherwise returns an empty string 6. system.methodSignature <array> system.methodSignature (<string>) Returns an array of known signatures (an array of arrays) for the method name passed. If no signatures are known, returns a none-array (test for type != array to detect missing signature) 

Here you can find the source code: XMLRPC Discovery Service

+2
source

All Articles