Note: This is taken from the Chicken Wiki, where a more recent version could be available.
A library for XML-RPC client/servers.
http ssax base64 url
Usage:
(require-extension xml-rpc-client)
<procedure>(xml-rpc:server HOST [PORT [PATH]] [user: USER] [password: PASSWORD] [attributes: ATTRIBUTES])</procedure>
Returns a procedure that, when called with the name of a remote XML-RPC method, will return a procedure that passes its arguments to the XML-RPC server which is given in HOST (a string), PORT (which defaults to 80) and PATH (which defaults to "/RPC2"). The USER and PASSWORD keyword arguments, if given, are used to perform basic authentication to the server. The ATTRIBUTES argument specifies an a-list of attributes to add to the HTTP request object sent to the server. If and only if HOST is a properly-formatted URL using the "http" or "https" schemes, the PORT, PATH, USER and PASSWORD information found in the URL takes precedence over the arguments with the same meaning.
Usage:
(require-extension xml-rpc-server)
<procedure>(xml-rpc:register-method NAME PROC [DOCSTRING [PATH]])</procedure>
Registers a remotely callable procedure PROC under NAME, which should be a string or a symbol. XML-RPC clients can now call this procedure (provided a HTTP server is started).
Unhandled exceptions are returned as "fault" responses. PATH specifies the URL under which the remote procedure is available and defaults to "/RPC2". DOCSTRING specifies an optional documentation string. See define-remote-method for a simpler method of defining XML-RPC procedures.
<procedure>(xml-rpc:method-documentation NAME [PATH])</procedure>
Returns the documentation-string of the method with the name NAME (a string) at the URL PATH (which defaults to "/RPC2").
<parameter>(xml-rpc:current-method-path)</parameter>
Contains the URL (a string) under which the currently executing method is called. Outside of the dynamic context of an XML-RPC method invocation, the value of this parameter is unspecified.
<macro>(define-remote-method (NAME VAR ... [. RVAR]) [DOCSTRING] BODY ...)</macro>
A more convenient syntax for defining remotely callable procedures. The optional DOCSTRING can be accessed by xml-rpc:method-documentation.
The following table summarizes how XML-RPC values map to Scheme data and vice versa:
Scheme → XML-RPC:
exact integer | i4 |
---|---|
number | double |
boolean | boolean |
string | string |
byte-vector | base64 |
vector | array |
a-list | struct |
list | struct |
XML-RPC → Scheme
i4, int, double | number |
---|---|
boolean | boolean |
string | string |
base64 | byte-vector |
array | vector |
struct | a-list |
dateTime.iso8601 | string |
This implementation of XML-RPC is extended to allow returning multiple values. Errors during the execution of a server-method are propagated to the client as "fault" responses.
Fetch time from xml-rpc.org:
(require-extension xml-rpc-client)
(define currentTime (xml-rpc:server "xml-rpc.org") ) (define getCurrentTime (currentTime "currentTime.getCurrentTime") ) (print (getCurrentTime))
A simple "hello" server:
% cat hello.scm (require-extension xml-rpc-server) (define-remote-method (hello var) (sprintf "Hello, ~A!" var) ) ((http:make-server 4242)) % cat client.scm (require-extension xml-rpc-client) (define srv (xml-rpc:server "http://localhost:4242/RPC2")) (define hello (srv "hello")) (print "-> " (hello "you")) % csi -script hello.scm & % csi -script client.scm -> Hello, you!
Copyright (c) 2003-2006, Felix L. Winkelmann All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.