Add mirror of xmlrpc ssl send call

This commit is contained in:
Miles Lott 2001-08-15 14:23:30 +00:00
parent 51a572a9f5
commit 2247e8c99c

View File

@ -1,37 +1,37 @@
<?php
/*
/*
SOAPx4
by Dietrich Ayala (C) 2001 dietrich@ganx4.com
SOAPx4
by Dietrich Ayala (C) 2001 dietrich@ganx4.com
This project began based on code from the 2 projects below,
and still contains some original code. The licenses of both must be respected.
This project began based on code from the 2 projects below,
and still contains some original code. The licenses of both must be respected.
XML-RPC for PHP
originally by Edd Dumbill (C) 1999-2000
XML-RPC for PHP
originally by Edd Dumbill (C) 1999-2000
SOAP for PHP
by Victor Zou (C) 2000-2001 <victor@gigaideas.com.cn>
SOAP for PHP
by Victor Zou (C) 2000-2001 <victor@gigaideas.com.cn>
*/
*/
/* changelog:
2001-07-04
- abstract type system to support either 1999 or 2001 schema (arg, typing still needs much
solidification.)
- implemented proxy support, based on sample code from miles lott <milos@speakeasy.net>
- much general cleanup of code & cleaned out what was left of original xml-rpc/gigaideas code
- implemented a transport argument into send() that allows you to specify different transports
(assuming you have implemented the function, and added it to the conditional statement in send()
- abstracted the determination of charset in Content-type header
2001-07-5
- fixed more weird type/namespace issues
*/
/* changelog:
2001-07-04
- abstract type system to support either 1999 or 2001 schema (arg, typing still needs much
solidification.)
- implemented proxy support, based on sample code from miles lott <milos@speakeasy.net>
- much general cleanup of code & cleaned out what was left of original xml-rpc/gigaideas code
- implemented a transport argument into send() that allows you to specify different transports
(assuming you have implemented the function, and added it to the conditional statement in send()
- abstracted the determination of charset in Content-type header
2001-07-5
- fixed more weird type/namespace issues
*/
// $path can be a complete endpoint url, with the other parameters left blank:
// $soap_client = new soap_client("http://path/to/soap/server");
class soap_client
{
// $path can be a complete endpoint url, with the other parameters left blank:
// $soap_client = new soap_client("http://path/to/soap/server");
class soap_client
{
function soap_client($path,$server=False,$port=False)
{
$this->port = 80;
@ -39,7 +39,7 @@ class soap_client
$this->server = $server;
$this->errno;
$this->errstring;
$this->debug_flag = True;
$this->debug_flag = False;
$this->debug_str = "";
$this->username = "";
$this->password = "";
@ -78,11 +78,24 @@ class soap_client
$this->password = $p;
}
function send($msg, $action, $timeout=0)
function send($msg, $action, $timeout=0, $ssl=False)
{
// where msg is an soapmsg
$msg->debug_flag = $this->debug_flag;
$this->action = $action;
if($ssl)
{
return $this->ssl_sendPayloadHTTP10(
$msg,
$this->server,
$this->port,
$timeout,
$this->username,
$this->password
);
}
else
{
return $this->sendPayloadHTTP10(
$msg,
$this->server,
@ -92,8 +105,9 @@ class soap_client
$this->password
);
}
}
function sendPayloadHTTP10($msg, $server, $port, $timeout=0, $username="", $password="")
function sendPayloadHTTP10($msg, $server, $port, $timeout=0, $username='', $password='')
{
if($timeout > 0)
{
@ -111,11 +125,10 @@ class soap_client
}
// thanks to Grant Rauscher <grant7@firstworld.net> for this
$credentials = "";
if ($username != "")
$credentials = '';
if ($username != '')
{
$credentials = "Authorization: Basic "
. base64_encode($username . ":" . $password) . "\r\n";
$credentials = "Authorization: Basic " . base64_encode($username . ":" . $password) . "\r\n";
}
$soap_data = $msg->serialize();
@ -148,6 +161,52 @@ class soap_client
return $this->response;
}
function ssl_sendPayloadHTTP10($msg, $server, $port, $timeout=0,$username='', $password='')
{
if(!function_exists(curl_init))
{
$this->errstr = 'No curl functions available - use of ssl is invalid';
return False;
}
/* curl Method borrowed from:
http://sourceforge.net/tracker/index.php?func=detail&aid=427359&group_id=23199&atid=377731
*/
// thanks to Grant Rauscher <grant7@firstworld.net>
// for this
$credentials = '';
if ($username!='')
{
$credentials = "Authorization: Basic " . base64_encode($username . ':' . $password) . "\r\n";
}
$soap_data = $msg->serialize();
$this->outgoing_payload = "POST ".
$this->path.
" HTTP/1.0\r\n".
"User-Agent: SOAPx4 v0.13492\r\n".
"Host: ".$this->server . "\r\n".
$credentials.
"Content-Type: text/xml\r\nContent-Length: ".strlen($soap_data)."\r\n".
"SOAPAction: \"$this->action\""."\r\n\r\n".
$soap_data;
// send
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$this->server);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $this->outgoing_payload);
curl_setopt($ch, CURLOPT_HEADER, 0);
$incoming_payload = curl_exec($ch);
curl_close($ch);
$this->incoming_payload = $incoming_payload;
// $response is a soapmsg object
$this->response = $msg->parseResponse($incoming_payload);
$this->debug($msg->debug_str);
return $this->response;
}
function debug($string)
{
if($this->debug_flag)
@ -155,6 +214,5 @@ class soap_client
$this->debug_str .= "$string\n";
}
}
} // end class soap_client
} // end class soap_client
?>