PHP integra el acceso a dos protocolos, XML-RPC y SOAP, ambos concentrados en la extensión xmlrpc. Además, en PEAR de PHP, ya sea PHP 4 o PHP 5, la extensión XML-RPC se ha integrado de forma predeterminada, y esta extensión no tiene nada que ver con la extensión xmlrpc y puede implementar de forma independiente la interacción del protocolo XML-RPC. No hay una extensión xmlrpc, se recomienda utilizar la extensión PEAR::XML-RPC.
Introducción al servicio web
El servicio web fue creado para la comunicación de sistemas heterogéneos. Su idea básica es utilizar llamadas remotas HTTP basadas en XML para proporcionar un mecanismo estándar, eliminando la necesidad de establecer un nuevo protocolo. Actualmente existen dos estándares de protocolo para la comunicación de servicios web, uno es XML-RPC y el otro es SOAP. XML-RPC es relativamente simple y apareció antes, mientras que SOAP es más complejo y se usa principalmente cuando se requiere estabilidad, robustez, seguridad e interacciones complejas.
Aquí utilizamos principalmente XML-RPC para describir brevemente el proceso de interacción del servicio web. Parte del contenido proviene del manual de PHP. Para obtener más detalles, se recomienda consultar el manual.
Instale la extensión xmlrpc php.
Si la extensión xmlrpc php no está instalada en su sistema, instálela correctamente.
En la plataforma Windows, primero coloque la extensión php_xmlrpc.dll en el directorio de instalación de PHP en el directorio C:Windows o C:Winnt (la extensión para PHP4 está en el directorio C:phpextensions y la extensión para PHP5 está en el directorio C: phpext), y elimine el punto y coma ";" delante de extensión=php_xmlrpc.dll en C:Windowsphp.ini o C:Winntphp.ini, luego reinicie el servidor web y verifique phpinfo () Si existe un proyecto XML-RPC, puede determinar si la extensión xmlrpc se ha instalado correctamente.
En la plataforma Unix/Linux, si la extensión xmlrpc no está instalada, vuelva a compilar PHP, agregue la opción --with-xmlrpc al configurar y luego verifique phpinfo() para ver si xmlrpc está instalado normalmente.
(Nota: las siguientes operaciones se basan en la instalación normal de la expansión xmlrpc. Asegúrese de instalarla correctamente).
Principio de funcionamiento de XML-RPC
XML-RPC generalmente significa que todo el proceso utiliza XML para la comunicación. Primero, se construye un servidor RPC para procesar solicitudes encapsuladas en XML pasadas desde el cliente RPC, y los resultados del procesamiento se devuelven al cliente RPC en forma de XML. Luego, el cliente analiza el XML para obtener los datos que necesita.
El lado del servidor de XML-RPC debe tener funciones listas para ser llamadas por el cliente, y las funciones y métodos en la solicitud enviada por el cliente deben ser consistentes con los del lado del servidor; de lo contrario, no se obtendrán los resultados requeridos.
A continuación hago un código simple para describir todo el proceso.
El servidor de práctica XML-RPC
utiliza la función xmlrpc_server_create para generar un servidor, luego registra la interfaz de llamada RPC que debe exponerse, acepta la POST de datos XML del cliente RPC y luego los procesa. Los resultados del procesamiento se muestran al cliente. en forma de XML.
El código es el siguiente: rpc_server.php
<?php
/**
* Función: función proporcionada para ser llamada por el cliente RPC
* Parámetros:
* $method es la función que el cliente necesita llamar
* $params es la matriz de parámetros de la función que el cliente necesita llamar.
* Devolver: Devuelve el resultado de la llamada especificada
*/
función rpc_server_func($método, $params) {
$parámetro = $parámetros[0];
si ($parámetro == "obtener"){
$return = ''Estos datos por método get'';
}demás{
$return = ''No especificar método ni parámetros'';
}
devolver $regresar;
}
//Generar un lado del servidor XML-RPC
$xmlrpc_server = xmlrpc_server_create();
//Registra un método rpc_server llamado por el servidor, que en realidad apunta a la función rpc_server_func
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");
//Aceptar datos XML POST del cliente
$request = $HTTP_RAW_POST_DATA
//Obtener el resultado de la ejecución después de ejecutar la solicitud XML llamando al cliente
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null
// Genera el resultado XML después del procesamiento de la función
);
encabezado(''Tipo de contenido: texto/xml'');
echo $xmlrpc_response;
//Destruye los recursos del lado del servidor XML-RPC
xmlrpc_server_destroy($xmlrpc_server);
?>
Después de construir el lado del servidor, construyamos nuestro cliente RPC. El cliente accede al puerto 80 del servidor XML-RPC aproximadamente a través de Socket, luego encapsula la interfaz RPC que debe llamarse en XML, la envía al servidor RPC a través de una solicitud POST y finalmente obtiene el resultado devuelto por el servidor.
El código es el siguiente: rpc_client.php
<?php
/**
* Función: Función proporcionada al cliente para conectarse al servidor XML-RPC
* Parámetros:
* $host El host que necesita estar conectado
* $port puerto para conectarse al host
* $rpc_server Archivo del lado del servidor XML-RPC
* $request información de solicitud XML encapsulada
* Devolución: si la conexión es exitosa, se devolverá la información XML devuelta por el servidor. Si la conexión es exitosa, devolverá falso.
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
//Abre el servidor especificado
$fp = fsockopen($host, $port);
//Construye la consulta POST información de solicitud del servidor XML-RPC que necesita comunicarse
$query = "POST $rpc_server HTTP/1.0nUser_Agent: Cliente XML-RPCnHost: ".$host."nTipo de contenido: texto/xmlnLongitud del contenido: ".strlen($solicitud)."n n".$request."n";
//Envía el protocolo HTTP construido al servidor y devuelve false si falla.
si (!fputs($fp, $consulta, strlen($consulta))) {
$errstr = "Error de escritura";
devolver falso;
}
//Obtener toda la información devuelta por el servidor, incluidos los encabezados HTTP y la información XML
$contenido = '''';
mientras (!feof($fp)){
$contenido .= fgets($fp);
}
//Devuelve el contenido obtenido después de cerrar el recurso de conexión
fclose($fp);
devolver $contenido;
}
//Construye información para conectarse al servidor RPC
$host = ''localhost'';
$puerto = 80;
$rpc_server = ''/~heiyeluren/rpc_server.php'';
// Codifique la solicitud XML que debe enviarse en XML. El método que debe llamarse es rpc_server y el parámetro es get.
$request = xmlrpc_encode_request(''rpc_server'', ''get'');
//Llame a la función rpc_client_call para enviar todas las solicitudes al servidor XML-RPC y obtener la información.
$response = rpc_client_call($host, $port, $rpc_server, $request);
//Analiza el XML devuelto por el servidor, elimina la información del encabezado HTTP y convierte el XML en una cadena que PHP pueda reconocer.
$división = ''<?xml versión="1.0" codificación="iso-8859-1"?>'';
$xml = explotar($dividir, $respuesta);
$xml = $dividir. array_pop($xml);
$response = xmlrpc_decode($xml);
//Envía la información obtenida del servidor RPC
print_r($respuesta);
?>
En términos generales, nuestro ejemplo anterior es enviar un método llamado rpc_server, el parámetro es get y luego obtener el retorno del servidor. Los datos XML devueltos por el servidor son:
<?xml version="1.0" encoding=". iso-8859-1 "?>
<métodoRespuesta>
<parámetros>
<parámetro>
<valor>
<string>Estos datos por método get</string>
</valor>
</param>
</params>
</methodResponse>
Luego codificamos este XML en una cadena PHP a través de la función xmlrpc_decode, podemos procesarlo a voluntad y se completa toda la interacción del servicio web.
Conclusión
Ya sea XML-RPC o SOAP, siempre que nos permita realizar llamadas a procesos remotos de manera estable y segura y completar nuestro proyecto, todo el servicio web será exitoso. Además, si es posible, también puede intentar utilizar XML-RPC en PEAR para implementar operaciones similares a las anteriores. Puede que le resulte más sencillo y adecuado.
Simplemente use XML-RPC para la interacción del servicio web. Para algunos códigos, consulte el manual de PHP. Si desea obtener información detallada, se recomienda consultar el manual. Si el artículo es incorrecto, corríjame.
Este artículo proviene del enlace original de información de PHP: http://www.phpchina.com/html/84/n-33884.html