Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00015 final class XmlRpcClient
00016 {
00017 private $url = null;
00018 private $timeout = null;
00019
00020 public function __construct($url = null)
00021 {
00022 $this->url = $url;
00023 }
00024
00028 public static function create($url = null)
00029 {
00030 return new self($url);
00031 }
00032
00033 public function getUrl()
00034 {
00035 return $this->url;
00036 }
00037
00041 public function setUrl($url)
00042 {
00043 $this->url = $url;
00044 return $this;
00045 }
00046
00047 public function getTimeout()
00048 {
00049 return $this->timeout;
00050 }
00051
00055 public function setTimeout($timeout)
00056 {
00057 $this->timeout = $timeout;
00058 return $this;
00059 }
00060
00061 public function query($method, $parameters = null)
00062 {
00063 $request = xmlrpc_encode_request($method, $parameters);
00064
00065 $headers = array(
00066 "Content-type: text/xml",
00067 "Content-length: ".strlen($request)
00068 );
00069
00070 $curl = curl_init();
00071 curl_setopt($curl, CURLOPT_URL, $this->url);
00072 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
00073 curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
00074 curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
00075
00076 if ($this->timeout)
00077 curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
00078
00079 $rawResponse = curl_exec($curl);
00080 $curlErrno = curl_errno($curl);
00081 $curlError = curl_error($curl);
00082
00083 curl_close($curl);
00084
00085 if ($curlErrno)
00086 throw new NetworkException($curlError, $curlErrno);
00087
00088 $result = xmlrpc_decode($rawResponse);
00089
00090 if (xmlrpc_is_fault($result))
00091 throw new NetworkException(
00092 $result['faultString'],
00093 $result['faultCode']
00094 );
00095
00096 return $result;
00097 }
00098 }
00099 ?>