Я написал класс / функцию для отправки xml через https через PHP4 / cURL, просто интересно, правильный ли это подход или есть лучший.
Обратите внимание, что PHP5 в настоящее время недоступен.
/**
* Send XML via http(s) post
*
* curl --header "Content-Type: text/xml" --data "<?xml version = "1.0"?>...." http://www.foo.com/
*
*/
function sendXmlOverPost($url, $xml) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// For xml, change the content-type.
curl_setopt ($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ask for results to be returned
if (CurlHelper::checkHttpsURL($url)) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}
// Send to remote and return data to caller.
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
ваше здоровье!






Используйте класс SoapClient, поставляемый с большинством установок PHP.
Пример:
$soap = new SoapClient("http://some.url/service/some.wsdl");
$args = array("someTypeName" => "someTypeValue"
"someOtherTypeName" => "someOtherTypeValue");
$response = $soap->executeSomeService($args);
print_r($response);
Ура, но я не думаю, что используемый мной XML API на самом деле использует SOAP, просто читает строку из сообщения.
Если вы используете протокол XML-RPC (похоже, исходя из того, что вы сказали), и вы используете как минимум PHP 4.2, посмотрите http://phpxmlrpc.sourceforge.net/ для библиотек и ресурсов.
$ ch = curl_init ($ serviceUrl);
if ( $this -> usingHTTPS() )
{
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $this->sslVerifyHost);
}
curl_setopt($ch,CURLOPT_POST,TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "OTA_request = ".urlencode($this->xmlMessage));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$this->xmlResponse = curl_exec ($ch);
$this -> callerFactory -> dbgMsg('xmlResponse: <hr><pre>'.htmlentities($this->xmlResponse).'</pre><hr>'. curl_error($ch));
curl_close ($ch);
$this->checkResponse();
Отличное решение! Нашел и здесь похожий:
Также они показали, как получить такой XML / JSON на сервере.
// here you can have all the required business checks
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ){
$postText = file_get_contents('php://input');
}
Вау, в настоящее время это не вариант? :( Также, если вы не настроены на cURL, посмотрите HTTP_Request (pear.php.net/package/HTTP_Request).