xmlrpc(1)

✨ xmlrpc(1) β€” the manual page, but make it cute ✨

okay so bestie, welcome to the xmlrpc manual page πŸ’– this one lives in the xmlrpc Manual section, and it's literally your group chat with an XML-RPC server. sit down, grab a boba, we're doing remote procedure calls 🧚


🌸 NAME 🌸

xmlrpc β€” makes an XML-RPC remote procedure call and displays the response


πŸŽ€ SYNOPSIS πŸŽ€

xmlrpc url method parameters [-transport=transportname]
                             [-username=username -password=passwd]
                             [-curlinterface={interface|host}]
                             [-curlnoverifypeer]
                             [-curlnoverifyhost]

πŸ’… DESCRIPTION πŸ’…

so this program runs Remote Procedure Calls (RPC) using an XML-RPC client. its main character energy is debugging and learning, because normally RPCs are just... embedded deep in the source code of other programs πŸ™ˆ. here, you get to poke at them directly. iconic.


πŸ¦‹ ARGUMENTS πŸ¦‹

  • url β€” this is the URL of the XML-RPC server. XML-RPC rides on HTTP, so it's gotta be an HTTP url, no cap. but here's the slay: if you don't specify a type ("http:") in the URL, xmlrpc assumes an "http://" prefix and a "/RPC2" suffix. RPC2 is the conventional file name for an XML-RPC responder. so thoughtful of it fr fr πŸ’–
  • method β€” the name of the XML-RPC method you wanna invoke. that's it, that's the whole vibe.
  • parameters β€” a list of parameters for the RPC. xmlrpc turns each of these arguments into an XML-RPC parameter, in the order given. and yes, you may specify no parameters if you like β€” zero is a valid number of parameters, live your truth ✨

you specify the data type of the parameter with a prefix ending in a slash. Example: i/5. here, the "i" signifies an integer data type, and "5" is the value. so slay.

xmlrpc is capable of only a subset of the possible XML-RPC types, as follows by prefix:

  • i/ β€” integer (<i4>) (32 bit).
  • s/ β€” string (<string>).
  • h/ β€” byte string (<base64>). specify the value in hexadecimal.
  • b/ β€” boolean (<boolean>). specify the value as "true" or "t" for true; "false" or "f" for false.
  • d/ β€” double (<double>) β€” i.e. real number.
  • n/ β€” nil (<nil>).
  • I/ β€” 64 bit integer (<i8>).
note the difference bestie: lowercase i/ is 32 bit integer, uppercase I/ is 64 bit. not me almost confusing them 😭

πŸ”₯ OPTIONS πŸ”₯

  • -transport=transportname β€” this selects the XML transport facility (e.g. libwww) that xmlrpc uses to perform the RPC. the name transportname is one that the Xmlrpc-c programming library recognizes. this is typically libwww, curl, and wininet. by default, xmlrpc lets the Xmlrpc-c library choose. no pressure, library, you got this πŸ’…
  • -username=username
  • -password=passwd

these two options, which must be used together, cause the client to authenticate itself to the server, if the server requires it, using HTTP Basic Authentication and the specified username and password. duo goals, honestly 🫢

  • -curlinterface={interface|host} β€” this option gives the "interface" option for a Curl XML transport. the exact meaning of this option is up to the Curl library, and the best documentation for it is the manual for the 'curl' program that comes with the Curl library. but essentially, it chooses the local network interface through which to send the RPC. it causes the Curl library to perform a "bind" operation on the socket it uses for the communication. it can be the name of a network interface (e.g. on Linux, "eth1") or an IP address of the interface or a host name that resolves to the IP address of the interface. unfortunately, you can't explicitly state which form you're specifying, so there's some ambiguity. 😭 Examples: -interface=eth1 -interface=64.171.19.66 -interface=giraffe.giraffe-data.com

this option causes xmlrpc to default to using the Curl XML transport. you may not specify any other transport. periodt.

  • -curlnoverifypeer β€” this option gives the "no_ssl_verifypeer" option for the Curl XML transport, which is essentially the CURLOPT_SSL_VERIFYPEER option of the Curl library. see the curl_easy_setopt() man page for details on this, but essentially it means that the client does not authenticate the server's certificate of identity β€” it just believes whatever the server says πŸ™ˆ. you may want to use -curlnoverifyhost as well. since you're not authenticating the server's identity, there's not much sense in checking it. this option causes xmlrpc to default to using the Curl XML transport. you may not specify any other transport.
  • -curlnoverifyhost β€” this option gives the "no_ssl_verifyhost" option for the Curl XML transport, which is essentially the CURLOPT_SSL_VERIFYHOST option of the Curl library. see the curl_easy_setopt() man page for details on this, but essentially it means that the client does not verify the server's identity. it just assumes that if the server answers the IP address of the server as indicated by the URL (probably via host name), then it's the intended server πŸ‘€. you may want to use -curlnoverifypeer as well. as long as you don't care who the server says it is, there's no point in authenticating its identity. this option causes xmlrpc to default to using the Curl XML transport. you may not specify any other transport.
⚠️ bestie, real talk: -curlnoverifypeer and -curlnoverifyhost both mean you're not checking who the server is. that's a trust-the-void kind of move. use them knowingly πŸ’€

🌈 EXAMPLES 🌈

$ xmlrpc http://localhost:8080/RPC2 sample.add i/3 i/5

Result: Integer: 8
$ xmlrpc localhost:8080 sample.add i/3 i/5

Result: Integer: 8
$ xmlrpc http://xmlrpc.example.com/~bryanh echostring "s/This is a string"

Result: String: This is a string
$ xmlrpc http://xmlrpc.example.com/~bryanh echostring "This is a string in shortcut syntax"

Result: String: This is a string in shortcut syntax
$ xmlrpc http://xmlrpc.example.com sample.add i/3 i/5 -transport=curl -curlinterface=eth1 -username=bryanh -password=passw0rd

Result: Integer: 8

see that? 3 + 5 = 8 every single time. math is the one thing that never misses πŸ“


😭 LIMITATIONS 😭

if you run xmlrpc in an environment in which programs get their arguments encoded some way other than UTF-8, xmlrpc will generate garbage for the XML-RPC call and display garbage for the XML-RPC response πŸ’€. typically, you control this aspect of the environment with a LANG environment variable. one safe value for LANG is "C".

so if your output looks like cursed hieroglyphics, check your LANG. "C" is the safe bestie πŸ’–

πŸ‘‘ SEE ALSO πŸ‘‘


πŸ’œ AUTHOR πŸ’œ

xmlrpc was written by Eric Kidd.

this manual page was written by Bryan Henderson and adapted for Debian by Carlos Henrique Lima Melara.


and that's the whole thing, bestie. this page is from xmlrpc-1.33.14, dated 19 Jun 2020 β€” go forth and make your remote procedure calls, you absolute legend βœ¨πŸ’…πŸ¦‹πŸŒΈ