XML RPC Client

XML-RPC Client is a Cocoa-based developer tool for Mac OS X that allows you to access and debug XML-RPC web services from the comfort of your desktop.

Using XML-RPC Client is insanely easy.

  1. Type in the desired XML-RPC Endpoint URL.
  2. Type in the specific desired XML-RPC function to call.
  3. Now the interesting part... type in the params for your XML-RPC function call using JavaScript syntax for all of the XML-RPC datatypes (including arrays, structs, dates, and base64 values to an arbitrary depth).
  4. Click "Execute".

Upon completing the function call you will see three groups of information in the main tabbed display:

  1. XML Request: This is the raw XML request you have just sent to the server.
  2. XML Response: This is the raw XML response you have just received from the server.
  3. Object Response: This is a psuedo-code representation of the objects that were returned from the server.

To specify params, you can use JavaScript syntax. For example, say you had a function that accepted a single string argument. You would write the following in the "Params" text area:

"my arg"


'my arg'

If you had a function that accepts two arguments of type integer and boolean:

42, true

If you had a function that accepts a single array argument containing integers:

[1, 2, 3]

A function that accepts a single struct argument:

{name: 'Todd', age: 27, jobs:['developer', 'exotic dancer']}

Note that unlike Python, the struct keys are not quoted.

New in version 1.6:

  • Universal Binary. XML-RPC Client now runs natively on both PPC and Intel Macs.

New in version 1.5:

  • Find panel for Response Object text area Now you can use the standard Cocoa find panel to search for strings in the response Object text area. Much better.
  • Fixed a dateTime.iso8601 bug where the date format string was erroneously leaving out the century. Now the dateTime string format is correct... it includes century as the first two digits.

New in version 1.4:

  • Cool new support for the XML-RPC base64 data type.
  • Support for the XML-RPC dateTime.iso8601 data type.
  • Fixed a bug where an empty array param ([] or new Array()) would be converted to an XML-RPC struct. It is now correctly reported as an empty XML-RPC array data type.

So how do you specify parameters with these data types? Simple.

For the dateTime.iso8601 data type, you use the simple JavaScript Date class in the params text area. For example, if you wanted to call an XML-RPC function with a single param of type dateTime.iso8601 with a value of today's date, you would type the following in the params text area:

new Date()

This would result in something like the following raw XML param:


For October 26, 1977, you could type any of the following (depending on your locale settings):

new Date("10/26/77") // you might have to reverse the month/day if your default locale is not US

new Date("1977/10/26")

new Date("October 26, 1977")

Resulting raw XML:


This is standard JavaScript syntax for dates. If you have any questions about the syntax, it's probably best to just check a JavaScript reference book such as my personal favorite: JavaScript: The Definitive Guide.

Support for the XML-RPC base64 data type is also implemented! As I mentioned this is really cool...

Say you want to send a base64 param with the string value of "yo dude". You need this to be encoded into base64 as part of the process:

new Base64Encode("yo dude")

Note that the JavaScript data type used is Base64Encode. This data type not only creates a base64 param out of your string value, it also encodes your string value in the process.

Here's the resulting XML with the string value encoded that will be sent across the pipes:


So say you have already attained the encoded value for this string (or an image or whatever). You just want that literal value to show up inside the base64 element in the XML request... you don't want the string value re-encoded again. In that case you use the plain old Base64 custom class in your param string:

new Base64("eW8gZHVkZQ==")

You will once again see this in the raw XML request:


New in version 1.3:

  • XML-RPC Client is now a multi-window application (Document-based, in Cocoa developer terms). The app does not yet have bookmarking capabilities for saving your URIs, methods, and params, so this eases the pain somewhat until bookmarking is implemented... now you can open a new window for each service you want to access, and you won't have to re-type the URI, method, and params constantly in the same window if you want to switch between two or more services.
  • Improved UI responsiveness during XML-RPC method execution (I discovered a nasty piece of code that I had written in 1.0 that was blocking the main GUI thread during a portion of the response parsing... ouch).
  • Improved memory usage. Until 1.3, I was wastefully constructing duplicate DOM trees out of response XML-RPC documents simply to search for a <fault> element using XPath. In 1.3, I'm now just using Apple's NSXML SAX-like event parser to parse the first two elements of the response XML looking for one named <fault>. This is significantly more efficient for large response documents that don't contain faults.
  • The 'Execute' button now toggles it's state to be a 'Stop' button during service method execution. This behavior is very similar to the 'Reload'/'Stop' button of Safari, where one button handles both actions by toggling state. There has always been a menu item/keyboard shortcut for this feature, but now it's more accessible.
  • Activated the basic, 'free', AppleScript-ability that Cocoa apps can have by default. By this, I don't mean to say that XML-RPC Client is truly AppleScript-able... it is not... yet. But I have 'turned on' the basic, built-in AppleScript-ability that all Cocoa apps get for free. This includes things like app launching, and basic window management via scripts.

New in version 1.2 -- configure success and failure sounds through the Preferences pane.

New in Version 1.1 -- increased application stability, UI response times, and error reporting for param parse errors when you've entered invalid syntax into the params text area.