Public Member Functions | |
ilBMFTransport_HTTP ($URL, $encoding=SOAP_DEFAULT_ENCODING) | |
ilBMFTransport_HTTP Constructor | |
& | send (&$msg, $options=NULL) |
send and receive soap data | |
setCredentials ($username, $password) | |
set data for http authentication creates Authorization header | |
_validateUrl () | |
validate url data passed to constructor | |
_parseEncoding ($headers) | |
_parseResponse () | |
remove http headers from response | |
& | _getRequest (&$msg, $options) |
create http request, including headers, for outgoing request | |
& | _sendHTTP (&$msg, $options) |
send outgoing request, and read/parse response | |
& | _sendHTTPS (&$msg, $options) |
send outgoing request, and read/parse response, via HTTPS | |
Data Fields | |
$headers = array() | |
$timeout = 4 | |
$urlparts = NULL | |
$url = '' | |
$incoming_payload = '' | |
$_userAgent = SOAP_LIBRARY_NAME | |
$encoding = SOAP_DEFAULT_ENCODING | |
$result_encoding = 'UTF-8' | |
$result_content_type |
Definition at line 32 of file class.ilBMFTransport_HTTP.php.
& ilBMFTransport_HTTP::_getRequest | ( | &$ | msg, | |
$ | options | |||
) |
create http request, including headers, for outgoing request
Definition at line 240 of file class.ilBMFTransport_HTTP.php.
References $headers.
Referenced by _sendHTTP(), and _sendHTTPS().
{ $action = isset($options['soapaction'])?$options['soapaction']:''; $fullpath = $this->urlparts['path']. (isset($this->urlparts['query'])?'?'.$this->urlparts['query']:''). (isset($this->urlparts['fragment'])?'#'.$this->urlparts['fragment']:''); if (isset($options['proxy_user'])) { $this->headers['Proxy-Authorization'] = 'Basic ' . base64_encode($options['proxy_user'].":".$options['proxy_pass']); } $this->headers['User-Agent'] = $this->_userAgent; $this->headers['Host'] = $this->urlparts['host']; $this->headers['Content-Type'] = "text/xml; charset=$this->encoding"; $this->headers['Content-Length'] = strlen($msg); $this->headers['SOAPAction'] = "\"$action\""; if (isset($options['headers'])) { $this->headers = array_merge($this->headers, $options['headers']); } $headers = ''; foreach ($this->headers as $k => $v) { $headers .= "$k: $v\r\n"; } $this->outgoing_payload = "POST $fullpath HTTP/1.0\r\n". $headers."\r\n". $msg; return $this->outgoing_payload; }
ilBMFTransport_HTTP::_parseEncoding | ( | $ | headers | ) |
Definition at line 179 of file class.ilBMFTransport_HTTP.php.
References $headers.
Referenced by _parseResponse().
{ $h = stristr($headers,'Content-Type'); preg_match('/^Content-Type:\s*(.*)$/im',$h,$ct); $this->result_content_type = str_replace("\r","",$ct[1]); if (preg_match('/(.*?)(?:;\s?charset=)(.*)/i',$this->result_content_type,$m)) { // strip the string of \r $this->result_content_type = $m[1]; if (count($m) > 2) { $enc = strtoupper(str_replace('"',"",$m[2])); if (in_array($enc, $this->_encodings)) { $this->result_encoding = $enc; } } } // deal with broken servers that don't set content type on faults if (!$this->result_content_type) $this->result_content_type = 'text/xml'; }
ilBMFTransport_HTTP::_parseResponse | ( | ) |
remove http headers from response
Definition at line 204 of file class.ilBMFTransport_HTTP.php.
References ilBMFBase::_decodeDIMEMessage(), ilBMFBase::_decodeMimeMessage(), _parseEncoding(), and ilBMFBase::_raiseSoapFault().
Referenced by _sendHTTP().
{ if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $this->incoming_payload, $match)) { #$this->response = preg_replace("/[\r|\n]/", '', $match[2]); $this->response = $match[2]; // find the response error, some servers response with 500 for soap faults if (preg_match("/^HTTP\/1\.. (\d+).*/s",$match[1],$status) && $status[1] >= 400 && $status[1] < 500) { $this->_raiseSoapFault("HTTP Response $status[1] Not Found"); return FALSE; } $this->_parseEncoding($match[1]); if ($this->result_content_type == 'application/dime') { // XXX quick hack insertion of DIME $this->_decodeDIMEMessage($this->response,$this->headers,$this->attachments); $this->result_content_type = $this->headers['content-type']; } else if (stristr($this->result_content_type,'multipart/related')) { $this->response = $this->incoming_payload; $this->_decodeMimeMessage($this->response,$this->headers,$this->attachments); } else if ($this->result_content_type != 'text/xml') { $this->_raiseSoapFault($this->response); return FALSE; } // if no content, return false return strlen($this->response) > 0; } $this->_raiseSoapFault('Invalid HTTP Response'); return FALSE; }
& ilBMFTransport_HTTP::_sendHTTP | ( | &$ | msg, | |
$ | options | |||
) |
send outgoing request, and read/parse response
Definition at line 277 of file class.ilBMFTransport_HTTP.php.
References $data, $host, _getRequest(), _parseResponse(), and ilBMFBase::_raiseSoapFault().
Referenced by send().
{ $this->_getRequest($msg, $options); $host = $this->urlparts['host']; $port = $this->urlparts['port']; if (isset($options['proxy_host'])) { $host = $options['proxy_host']; $port = isset($options['proxy_port'])?$options['proxy_port']:8080; } // send if ($this->timeout > 0) { $fp = fsockopen($host, $port, $this->errno, $this->errmsg, $this->timeout); } else { $fp = fsockopen($host, $port, $this->errno, $this->errmsg); } if (!$fp) { return $this->_raiseSoapFault("Connect Error to $host:$port"); } if ($this->timeout > 0) { // some builds of php do not support this, silence // the warning @socket_set_timeout($fp, $this->timeout); } if (!fputs($fp, $this->outgoing_payload, strlen($this->outgoing_payload))) { return $this->_raiseSoapFault("Error POSTing Data to $host"); } // get reponse // XXX time consumer while ($data = fread($fp, 32768)) { $this->incoming_payload .= $data; } fclose($fp); if (!$this->_parseResponse()) { return $this->fault; } return $this->response; }
& ilBMFTransport_HTTP::_sendHTTPS | ( | &$ | msg, | |
$ | options | |||
) |
send outgoing request, and read/parse response, via HTTPS
Definition at line 327 of file class.ilBMFTransport_HTTP.php.
References $host, $key, _getRequest(), and ilBMFBase::_raiseSoapFault().
Referenced by send().
{ /* NOTE This function uses the CURL functions * Your php must be compiled with CURL */ if (!extension_loaded('curl')) { return $this->_raiseSoapFault('CURL Extension is required for HTTPS'); } $this->_getRequest($msg, $options); $ch = curl_init(); // XXX don't know if this proxy stuff is right for CURL if (isset($options['proxy_host'])) { // $options['http_proxy'] == 'hostname:port' $host = $options['proxy_host']; $port = isset($options['proxy_port'])?$options['proxy_port']:8080; curl_setopt($ch, CURLOPT_PROXY, $host.":".$port); } if (isset($options['proxy_user'])) { // $options['http_proxy_userpw'] == 'username:password' curl_setopt($ch, CURLOPT_PROXYUSERPWD, $options['proxy_user'].':'.$options['proxy_pass']); } if ($this->timeout) { //curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); //times out after 4s } curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $this->outgoing_payload); curl_setopt($ch, CURLOPT_URL, $this->url); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); if (isset($options['curl'])) { reset($options['curl']); while (list($key, $val) = each ($options['curl'])) { curl_setopt($ch, $key, $val); } } $this->response = curl_exec($ch); echo curl_error ( $ch); curl_close($ch); return $this->response; }
ilBMFTransport_HTTP::_validateUrl | ( | ) |
validate url data passed to constructor
Definition at line 153 of file class.ilBMFTransport_HTTP.php.
References ilBMFBase::_raiseSoapFault(), and setCredentials().
Referenced by send().
{ if ( ! is_array($this->urlparts) ) { $this->_raiseSoapFault("Unable to parse URL $url"); return FALSE; } if (!isset($this->urlparts['host'])) { $this->_raiseSoapFault("No host in URL $url"); return FALSE; } if (!isset($this->urlparts['port'])) { if (strcasecmp($this->urlparts['scheme'], 'HTTP') == 0) $this->urlparts['port'] = 80; else if (strcasecmp($this->urlparts['scheme'], 'HTTPS') == 0) $this->urlparts['port'] = 443; } if (isset($this->urlparts['user'])) { $this->setCredentials($this->urlparts['user'], $this->urlparts['pass']); } if (!isset($this->urlparts['path']) || !$this->urlparts['path']) $this->urlparts['path'] = '/'; return TRUE; }
ilBMFTransport_HTTP::ilBMFTransport_HTTP | ( | $ | URL, | |
$ | encoding = SOAP_DEFAULT_ENCODING | |||
) |
ilBMFTransport_HTTP Constructor
string | $URL http url to soap endpoint |
public
Definition at line 94 of file class.ilBMFTransport_HTTP.php.
References $encoding, and ilBMFBase::ilBMFBase().
{ parent::ilBMFBase('HTTP'); $this->urlparts = @parse_url($URL); $this->url = $URL; $this->encoding = $encoding; }
& ilBMFTransport_HTTP::send | ( | &$ | msg, | |
$ | options = NULL | |||
) |
send and receive soap data
string | &$msg outgoing post data | |
string | $action SOAP Action header data | |
int | $timeout socket timeout, default 0 or off |
Definition at line 112 of file class.ilBMFTransport_HTTP.php.
References ilBMFBase::_raiseSoapFault(), _sendHTTP(), _sendHTTPS(), and _validateUrl().
{ if (!$this->_validateUrl()) { return $this->fault; } if (isset($options['timeout'])) $this->timeout = (int)$options['timeout']; if (strcasecmp($this->urlparts['scheme'], 'HTTP') == 0) { return $this->_sendHTTP($msg, $options); } else if (strcasecmp($this->urlparts['scheme'], 'HTTPS') == 0) { return $this->_sendHTTPS($msg, $options); } return $this->_raiseSoapFault('Invalid url scheme '.$this->url); }
ilBMFTransport_HTTP::setCredentials | ( | $ | username, | |
$ | password | |||
) |
set data for http authentication creates Authorization header
string | $username username | |
string | $password response data, minus http headers |
Definition at line 140 of file class.ilBMFTransport_HTTP.php.
Referenced by _validateUrl().
{ $this->headers['Authorization'] = 'Basic ' . base64_encode($username . ':' . $password); }
ilBMFTransport_HTTP::$_userAgent = SOAP_LIBRARY_NAME |
Definition at line 74 of file class.ilBMFTransport_HTTP.php.
ilBMFTransport_HTTP::$encoding = SOAP_DEFAULT_ENCODING |
Definition at line 76 of file class.ilBMFTransport_HTTP.php.
Referenced by ilBMFTransport_HTTP().
ilBMFTransport_HTTP::$headers = array() |
Definition at line 40 of file class.ilBMFTransport_HTTP.php.
Referenced by _getRequest(), and _parseEncoding().
ilBMFTransport_HTTP::$incoming_payload = '' |
Definition at line 67 of file class.ilBMFTransport_HTTP.php.
ilBMFTransport_HTTP::$result_content_type |
Definition at line 86 of file class.ilBMFTransport_HTTP.php.
ilBMFTransport_HTTP::$result_encoding = 'UTF-8' |
Definition at line 84 of file class.ilBMFTransport_HTTP.php.
ilBMFTransport_HTTP::$timeout = 4 |
Definition at line 46 of file class.ilBMFTransport_HTTP.php.
ilBMFTransport_HTTP::$url = '' |
Definition at line 60 of file class.ilBMFTransport_HTTP.php.
ilBMFTransport_HTTP::$urlparts = NULL |
Definition at line 53 of file class.ilBMFTransport_HTTP.php.