Moodle PHP Documentation 4.1
Moodle 4.1.11 (Build: 20240610) (c8c84b4af18)
PhpXmlRpc\Client Class Reference

Public Member Functions

 __construct ($path, $server='', $port='', $method='')
 
 getLogger ()
 
 multicall ($reqs, $timeout=0, $method='', $fallback=true)
 Send an array of requests and return an array of responses.
 
 send ($req, $timeout=0, $method='')
 Send an xmlrpc request to the server.
 
 setAcceptedCompression ($compMethod)
 Enables/disables reception of compressed xmlrpc responses.
 
 setCaCertificate ($caCert, $isDir=false)
 Add a CA certificate to verify server with in SSL-enabled communication when SetSSLVerifypeer has been set to TRUE.
 
 setCertificate ($cert, $certPass='')
 Set the optional certificate and passphrase used in SSL-enabled communication with a remote server.
 
 setCookie ($name, $value='', $path='', $domain='', $port=null)
 Adds a cookie to list of cookies that will be sent to server with every further request (useful e.g.
 
 setCredentials ($user, $password, $authType=1)
 Sets the username and password for authorizing the client to the server.
 
 setCurlOptions ($options)
 Directly set cURL options, for extra flexibility (when in cURL mode).
 
 setDebug ($level)
 Enable/disable the echoing to screen of the xmlrpc responses received.
 
 setKey ($key, $keyPass)
 Set attributes for SSL communication: private SSL key.
 
 setProxy ($proxyHost, $proxyPort, $proxyUsername='', $proxyPassword='', $proxyAuthType=1)
 Set proxy info.
 
 setRequestCompression ($compMethod)
 Enables/disables http compression of xmlrpc request.
 
 setSSLVerifyHost ($i)
 Set attributes for SSL communication: verify the remote host's SSL certificate's common name (CN).
 
 setSSLVerifyPeer ($i)
 Set attributes for SSL communication: verify the remote host's SSL certificate, and cause the connection to fail if the cert verification fails.
 
 setSSLVersion ($i)
 Set attributes for SSL communication: SSL version to use.
 
 setUseCurl ($useCurlMode)
 
 setUserAgent ($agentString)
 Set user-agent string that will be used by this client instance in http headers sent to the server.
 

Static Public Member Functions

static setLogger ($logger)
 

Public Attributes

 $accepted_charset_encodings = array()
 Charset encodings that can be decoded without problems by the client.
 
 $accepted_compression = array()
 List of http compression methods accepted by the client for responses.
 
 $authtype = 1
 
 $cacert = ''
 
 $cacertdir = ''
 
 $cert = ''
 
 $certpass = ''
 
 $cookies = array()
 
 $debug = 0
 
 $errno
 
 $errstr
 
 $extracurlopts = array()
 
 $keepalive = false
 Whether to use persistent connections for http 1.1 and https.
 
 $key = ''
 
 $keypass = ''
 
 $method = 'http'
 
bool $no_multicall = false
 This determines whether the multicall() method will try to take advantage of the system.multicall xmlrpc method to dispatch to the server an array of requests in a single http roundtrip or simply execute many consecutive http calls.
 
 $password = ''
 
 $path
 
 $port = 0
 
 $proxy = ''
 
 $proxy_authtype = 1
 
 $proxy_pass = ''
 
 $proxy_user = ''
 
 $proxyport = 0
 
 $request_charset_encoding = ''
 The charset encoding that will be used for serializing request sent by the client.
 
 $request_compression = ''
 Name of compression scheme to be used for sending requests.
 
 $return_type = XMLParser::RETURN_XMLRPCVALS
 Decides the content of Response objects returned by calls to send() and multicall().
 
 $server
 
 $sslversion = 0
 
 $use_curl = self::USE_CURL_AUTO
 
 $user_agent
 Sent to servers in http headers.
 
 $username = ''
 
 $verifyhost = 2
 
 $verifypeer = true
 
 $xmlrpc_curl_handle = null
 CURL handle: used for keep-alive connections (PHP 4.3.8 up, see: http://curl.haxx.se/docs/faq.html#7.3).
 
const USE_CURL_ALWAYS = 1
 
const USE_CURL_AUTO = 2
 
const USE_CURL_NEVER = 0
 

Protected Member Functions

 prepareCurlHandle ($req, $server, $port, $timeout=0, $username='', $password='', $authType=1, $cert='', $certPass='', $caCert='', $caCertDir='', $proxyHost='', $proxyPort=0, $proxyUsername='', $proxyPassword='', $proxyAuthType=1, $method='https', $keepAlive=false, $key='', $keyPass='', $sslVersion=0)
 
 sendPayloadCURL ($req, $server, $port, $timeout=0, $username='', $password='', $authType=1, $cert='', $certPass='', $caCert='', $caCertDir='', $proxyHost='', $proxyPort=0, $proxyUsername='', $proxyPassword='', $proxyAuthType=1, $method='https', $keepAlive=false, $key='', $keyPass='', $sslVersion=0)
 Contributed by Justin Miller justi.nosp@m.n@vo.nosp@m.xel.n.nosp@m.et Requires curl to be built into PHP NB: CURL versions before 7.11.10 cannot use proxy to talk to https servers!
 
 sendPayloadHTTP10 ($req, $server, $port, $timeout=0, $username='', $password='', $authType=1, $proxyHost='', $proxyPort=0, $proxyUsername='', $proxyPassword='', $proxyAuthType=1, $method='http')
 
 sendPayloadHTTPS ($req, $server, $port, $timeout=0, $username='', $password='', $authType=1, $cert='', $certPass='', $caCert='', $caCertDir='', $proxyHost='', $proxyPort=0, $proxyUsername='', $proxyPassword='', $proxyAuthType=1, $keepAlive=false, $key='', $keyPass='', $sslVersion=0)
 
 sendPayloadSocket ($req, $server, $port, $timeout=0, $username='', $password='', $authType=1, $cert='', $certPass='', $caCert='', $caCertDir='', $proxyHost='', $proxyPort=0, $proxyUsername='', $proxyPassword='', $proxyAuthType=1, $method='http', $key='', $keyPass='', $sslVersion=0)
 

Static Protected Attributes

static $logger
 

Constructor & Destructor Documentation

◆ __construct()

PhpXmlRpc\Client::__construct ( $path,
$server = '',
$port = '',
$method = '' )
Parameters
string$patheither the PATH part of the xmlrpc server URL, or complete server URL (in which case you should use and empty string for all other parameters) e.g. /xmlrpc/server.php e.g. http://phpxmlrpc.sourceforge.net/server.php e.g. https://james:bond@secret.service.com:444/xmlrpcserver?agent=007 e.g. h2://fast-and-secure-services.org/endpoint
string$serverthe server name / ip address
integer$portthe port the server is listening on, when omitted defaults to 80 or 443 depending on protocol used
string$methodthe http protocol variant: defaults to 'http'; 'https', 'http11', 'h2' and 'h2c' can be used if CURL is installed. The value set here can be overridden in any call to $this->send(). Use 'h2' to make the lib attempt to use http/2 over a secure connection, and 'h2c' for http/2 without tls. Note that 'h2c' will not use the h2c 'upgrade' method, and be thus incompatible with any server/proxy not supporting http/2. This is because POST request are not compatible with h2c upgrade.

Member Function Documentation

◆ multicall()

PhpXmlRpc\Client::multicall ( $reqs,
$timeout = 0,
$method = '',
$fallback = true )

Send an array of requests and return an array of responses.

Unless $this->no_multicall has been set to true, it will try first to use one single xmlrpc call to server method system.multicall, and revert to sending many successive calls in case of failure. This failure is also stored in $this->no_multicall for subsequent calls. Unfortunately, there is no server error code universally used to denote the fact that multicall is unsupported, so there is no way to reliably distinguish between that and a temporary failure. If you are sure that server supports multicall and do not want to fallback to using many single calls, set the fourth parameter to FALSE.

NB: trying to shoehorn extra functionality into existing syntax has resulted in pretty much convoluted code...

Parameters
Request[]$reqsan array of Request objects
integer$timeoutconnection timeout (in seconds). See the details in the docs for the send() method
string$methodthe http protocol variant to be used. See the details in the docs for the send() method
booleanfallback When true, upon receiving an error during multicall, multiple single calls will be attempted
Return values
Response[]

◆ send()

PhpXmlRpc\Client::send ( $req,
$timeout = 0,
$method = '' )

Send an xmlrpc request to the server.

Parameters
Request | Request[] | string$reqThe Request object, or an array of requests for using multicall, or the complete xml representation of a request. When sending an array of Request objects, the client will try to make use of a single 'system.multicall' xml-rpc method call to forward to the server all the requests in a single HTTP round trip, unless $this->no_multicall has been previously set to TRUE (see the multicall method below), in which case many consecutive xmlrpc requests will be sent. The method will return an array of Response objects in both cases. The third variant allows to build by hand (or any other means) a complete xmlrpc request message, and send it to the server. $req should be a string containing the complete xml representation of the request. It is e.g. useful when, for maximal speed of execution, the request is serialized into a string using the native php xmlrpc functions (see http://www.php.net/xmlrpc)
integer$timeoutConnection timeout, in seconds, If unspecified, a platform specific timeout will apply. This timeout value is passed to fsockopen(). It is also used for detecting server timeouts during communication (i.e. if the server does not send anything to the client for $timeout seconds, the connection will be closed).
string$methodvalid values are 'http', 'http11', 'https', 'h2' and 'h2c'. If left unspecified, the http protocol chosen during creation of the object will be used. Use 'h2' to make the lib attempt to use http/2 over a secure connection, and 'h2c' for http/2 without tls. Note that 'h2c' will not use the h2c 'upgrade' method, and be thus incompatible with any server/proxy not supporting http/2. This is because POST request are not compatible with h2c upgrade.
Return values
Response|Response[]Note that the client will always return a Response object, even if the call fails
Todo

allow throwing exceptions instead of returning responses in case of failed calls and/or Fault responses

refactor: we now support many options besides connection timeout and http version to use. Why only privilege those?

◆ sendPayloadCURL()

PhpXmlRpc\Client::sendPayloadCURL ( $req,
$server,
$port,
$timeout = 0,
$username = '',
$password = '',
$authType = 1,
$cert = '',
$certPass = '',
$caCert = '',
$caCertDir = '',
$proxyHost = '',
$proxyPort = 0,
$proxyUsername = '',
$proxyPassword = '',
$proxyAuthType = 1,
$method = 'https',
$keepAlive = false,
$key = '',
$keyPass = '',
$sslVersion = 0 )
protected

Contributed by Justin Miller justi.nosp@m.n@vo.nosp@m.xel.n.nosp@m.et Requires curl to be built into PHP NB: CURL versions before 7.11.10 cannot use proxy to talk to https servers!

Parameters
Request$req
string$server
int$port
int$timeout
string$username
string$password
int$authType
string$cert
string$certPass
string$caCert
string$caCertDir
string$proxyHost
int$proxyPort
string$proxyUsername
string$proxyPassword
int$proxyAuthType
string$method'http' (let curl decide), 'http10', 'http11', 'https', 'h2c' or 'h2'
bool$keepAlive
string$key
string$keyPass
int$sslVersion
Return values
Response
Todo
refactor: we get many options for the call passed in, but some we use from $this. We should clean that up

◆ sendPayloadHTTP10()

PhpXmlRpc\Client::sendPayloadHTTP10 ( $req,
$server,
$port,
$timeout = 0,
$username = '',
$password = '',
$authType = 1,
$proxyHost = '',
$proxyPort = 0,
$proxyUsername = '',
$proxyPassword = '',
$proxyAuthType = 1,
$method = 'http' )
protected
Deprecated
Parameters
Request$req
string$server
int$port
int$timeout
string$username
string$password
int$authType
string$proxyHost
int$proxyPort
string$proxyUsername
string$proxyPassword
int$proxyAuthType
string$method
Return values
Response

◆ sendPayloadHTTPS()

PhpXmlRpc\Client::sendPayloadHTTPS ( $req,
$server,
$port,
$timeout = 0,
$username = '',
$password = '',
$authType = 1,
$cert = '',
$certPass = '',
$caCert = '',
$caCertDir = '',
$proxyHost = '',
$proxyPort = 0,
$proxyUsername = '',
$proxyPassword = '',
$proxyAuthType = 1,
$keepAlive = false,
$key = '',
$keyPass = '',
$sslVersion = 0 )
protected
Deprecated
Parameters
Request$req
string$server
int$port
int$timeout
string$username
string$password
int$authType
string$cert
string$certPass
string$caCert
string$caCertDir
string$proxyHost
int$proxyPort
string$proxyUsername
string$proxyPassword
int$proxyAuthType
bool$keepAlive
string$key
string$keyPass
int$sslVersion
Return values
Response

◆ sendPayloadSocket()

PhpXmlRpc\Client::sendPayloadSocket ( $req,
$server,
$port,
$timeout = 0,
$username = '',
$password = '',
$authType = 1,
$cert = '',
$certPass = '',
$caCert = '',
$caCertDir = '',
$proxyHost = '',
$proxyPort = 0,
$proxyUsername = '',
$proxyPassword = '',
$proxyAuthType = 1,
$method = 'http',
$key = '',
$keyPass = '',
$sslVersion = 0 )
protected
Parameters
Request$req
string$server
int$port
int$timeout
string$username
string$password
int$authTypeonly value supported is 1
string$cert
string$certPass
string$caCert
string$caCertDir
string$proxyHost
int$proxyPort
string$proxyUsername
string$proxyPassword
int$proxyAuthTypeonly value supported is 1
string$method'http' (synonym for 'http10'), 'http10' or 'https'
string$key
string$keyPass
Todo
not implemented yet.
Parameters
int$sslVersion
Todo
not implemented yet. See http://php.net/manual/en/migration56.openssl.php
Return values
Response
Todo
refactor: we get many options for the call passed in, but some we use from $this. We should clean that up

◆ setAcceptedCompression()

PhpXmlRpc\Client::setAcceptedCompression ( $compMethod)

Enables/disables reception of compressed xmlrpc responses.

This requires the "zlib" extension to be enabled in your php install. If it is, by default xmlrpc_client instances will enable reception of compressed content. Note that enabling reception of compressed responses merely adds some standard http headers to xmlrpc requests. It is up to the xmlrpc server to return compressed responses when receiving such requests.

Parameters
string$compMethodeither 'gzip', 'deflate', 'any' or ''

◆ setCaCertificate()

PhpXmlRpc\Client::setCaCertificate ( $caCert,
$isDir = false )

Add a CA certificate to verify server with in SSL-enabled communication when SetSSLVerifypeer has been set to TRUE.

See the php manual page about CURLOPT_CAINFO for more details.

Parameters
string$caCertcertificate file name (or dir holding certificates)
bool$isDirset to true to indicate cacert is a dir. defaults to false

◆ setCertificate()

PhpXmlRpc\Client::setCertificate ( $cert,
$certPass = '' )

Set the optional certificate and passphrase used in SSL-enabled communication with a remote server.

Note: to retrieve information about the client certificate on the server side, you will need to look into the environment variables which are set up by the webserver. Different webservers will typically set up different variables.

Parameters
string$certthe name of a file containing a PEM formatted certificate
string$certPassthe password required to use it

◆ setCookie()

PhpXmlRpc\Client::setCookie ( $name,
$value = '',
$path = '',
$domain = '',
$port = null )

Adds a cookie to list of cookies that will be sent to server with every further request (useful e.g.

for keeping session info outside of the xml-rpc payload).

NB: By default cookies are sent using the 'original/netscape' format, which is also the same as the RFC 2965; setting any param but name and value will turn the cookie into a 'version 1' cookie (i.e. RFC 2109 cookie) that might not be fully supported by the server. Note that RFC 2109 has currently 'historic' status...

Parameters
string$namenb: will not be escaped in the request's http headers. Take care not to use CTL chars or separators!
string$value
string$pathleave this empty unless the xml-rpc server only accepts RFC 2109 cookies
string$domainleave this empty unless the xml-rpc server only accepts RFC 2109 cookies
int$portleave this empty unless the xml-rpc server only accepts RFC 2109 cookies
Todo

check correctness of urlencoding cookie value (copied from php way of doing it, but php is generally sending response not requests. We do the opposite...)

strip invalid chars from cookie name? As per RFC6265, we should follow RFC2616, Section 2.2

◆ setCredentials()

PhpXmlRpc\Client::setCredentials ( $user,
$password,
$authType = 1 )

Sets the username and password for authorizing the client to the server.

With the default (HTTP) transport, this information is used for HTTP Basic authorization. Note that username and password can also be set using the class constructor. With HTTP 1.1 and HTTPS transport, NTLM and Digest authentication protocols are also supported. To enable them use the constants CURLAUTH_DIGEST and CURLAUTH_NTLM as values for the auth type parameter.

Parameters
string$userusername
string$passwordpassword
integer$authTypeauth type. See curl_setopt man page for supported auth types. Defaults to CURLAUTH_BASIC (basic auth). Note that auth types NTLM and Digest will only work if the Curl php extension is enabled.

◆ setCurlOptions()

PhpXmlRpc\Client::setCurlOptions ( $options)

Directly set cURL options, for extra flexibility (when in cURL mode).

It allows eg. to bind client to a specific IP interface / address.

Parameters
array$options

◆ setDebug()

PhpXmlRpc\Client::setDebug ( $level)

Enable/disable the echoing to screen of the xmlrpc responses received.

The default is not no output anything.

The debugging information at level 1 includes the raw data returned from the XML-RPC server it was querying (including bot HTTP headers and the full XML payload), and the PHP value the client attempts to create to represent the value returned by the server At level2, the complete payload of the xmlrpc request is also printed, before being sent t the server.

This option can be very useful when debugging servers as it allows you to see exactly what the client sends and the server returns.

Parameters
integer$levelvalues 0, 1 and 2 are supported (2 = echo sent msg too, before received response)

◆ setKey()

PhpXmlRpc\Client::setKey ( $key,
$keyPass )

Set attributes for SSL communication: private SSL key.

NB: does not work in older php/curl installs. Thanks to Daniel Convissor.

Parameters
string$keyThe name of a file containing a private SSL key
string$keyPassThe secret password needed to use the private SSL key

◆ setProxy()

PhpXmlRpc\Client::setProxy ( $proxyHost,
$proxyPort,
$proxyUsername = '',
$proxyPassword = '',
$proxyAuthType = 1 )

Set proxy info.

NB: CURL versions before 7.11.10 cannot use a proxy to communicate with https servers.

Parameters
string$proxyHost
string$proxyPortDefaults to 8080 for HTTP and 443 for HTTPS
string$proxyUsernameLeave blank if proxy has public access
string$proxyPasswordLeave blank if proxy has public access
int$proxyAuthTypedefaults to CURLAUTH_BASIC (Basic authentication protocol); set to constant CURLAUTH_NTLM to use NTLM auth with proxy (has effect only when the client uses the HTTP 1.1 protocol)

◆ setRequestCompression()

PhpXmlRpc\Client::setRequestCompression ( $compMethod)

Enables/disables http compression of xmlrpc request.

This requires the "zlib" extension to be enabled in your php install. Take care when sending compressed requests: servers might not support them (and automatic fallback to uncompressed requests is not yet implemented).

Parameters
string$compMethodeither 'gzip', 'deflate' or ''

◆ setSSLVerifyHost()

PhpXmlRpc\Client::setSSLVerifyHost ( $i)

Set attributes for SSL communication: verify the remote host's SSL certificate's common name (CN).

Note that support for value 1 has been removed in cURL 7.28.1

Parameters
int$iSet to 1 to only the existence of a CN, not that it matches

◆ setSSLVerifyPeer()

PhpXmlRpc\Client::setSSLVerifyPeer ( $i)

Set attributes for SSL communication: verify the remote host's SSL certificate, and cause the connection to fail if the cert verification fails.

By default, verification is enabled. To specify custom SSL certificates to validate the server with, use the setCaCertificate method.

Parameters
bool$ienable/disable verification of peer certificate

◆ setSSLVersion()

PhpXmlRpc\Client::setSSLVersion ( $i)

Set attributes for SSL communication: SSL version to use.

Best left at 0 (default value): let cURL decide

Parameters
int$i

◆ setUseCurl()

PhpXmlRpc\Client::setUseCurl ( $useCurlMode)
Parameters
int$useCurlModeself\USE_CURL_ALWAYS, self\USE_CURL_AUTO or self\USE_CURL_NEVER

◆ setUserAgent()

PhpXmlRpc\Client::setUserAgent ( $agentString)

Set user-agent string that will be used by this client instance in http headers sent to the server.

The default user agent string includes the name of this library and the version number.

Parameters
string$agentString

Member Data Documentation

◆ $accepted_compression

PhpXmlRpc\Client::$accepted_compression = array()

List of http compression methods accepted by the client for responses.

NB: PHP supports deflate, gzip compressions out of the box if compiled w. zlib.

NNB: you can set it to any non-empty array for HTTP11 and HTTPS, since in those cases it will be up to CURL to decide the compression methods it supports. You might check for the presence of 'zlib' in the output of curl_version() to determine whether compression is supported or not

◆ $method

PhpXmlRpc\Client::$method = 'http'
Todo
: do these need to be public?

◆ $no_multicall

bool PhpXmlRpc\Client::$no_multicall = false

This determines whether the multicall() method will try to take advantage of the system.multicall xmlrpc method to dispatch to the server an array of requests in a single http roundtrip or simply execute many consecutive http calls.

Defaults to FALSE, but it will be enabled automatically on the first failure of execution of system.multicall.

◆ $request_charset_encoding

PhpXmlRpc\Client::$request_charset_encoding = ''

The charset encoding that will be used for serializing request sent by the client.

It defaults to NULL, which means using US-ASCII and encoding all characters outside of the ASCII printable range using their xml character entity representation (this has the benefit that line end characters will not be mangled in the transfer, a CR-LF will be preserved as well as a singe LF). Valid values are 'US-ASCII', 'UTF-8' and 'ISO-8859-1'. For the fastest mode of operation, set your both your app internal encoding as well as this to UTF-8.

◆ $request_compression

PhpXmlRpc\Client::$request_compression = ''

Name of compression scheme to be used for sending requests.

Either null, gzip or deflate.

◆ $return_type

PhpXmlRpc\Client::$return_type = XMLParser::RETURN_XMLRPCVALS

Decides the content of Response objects returned by calls to send() and multicall().

Valid values are 'xmlrpcvals', 'phpvals' or 'xml'.

Determines whether the value returned inside an Response object as results of calls to the send() and multicall() methods will be a Value object, a plain php value or a raw xml string. Allowed values are 'xmlrpcvals' (the default), 'phpvals' and 'xml'. To allow the user to differentiate between a correct and a faulty response, fault responses will be returned as Response objects in any case. Note that the 'phpvals' setting will yield faster execution times, but some of the information from the original response will be lost. It will be e.g. impossible to tell whether a particular php string value was sent by the server as an xmlrpc string or base64 value.


The documentation for this class was generated from the following file: