Según el título, ¿es posible generar el XML creado por new SoapClient
antes de intentar ejecutar un __soapCall()
para garantizar que sea correcto antes de enviarlo al servidor SOAP?¿Puedo obtener una vista previa del XML que PHP SOAP desea enviar antes de enviarlo?
Respuesta
usted podría utilizar una clase derivada y sobrescribir el __doRequest() method de la clase SoapClient.
<?php
//$clientClass = 'SoapClient';
$clientClass = 'DebugSoapClient';
$client = new $clientClass('http://www.webservicex.com/CurrencyConvertor.asmx?wsdl');
$client->sendRequest = false;
$client->printRequest = true;
$client->formatXML = true;
$res = $client->ConversionRate(array('FromCurrency'=>'USD', 'ToCurrency'=>'EUR'));
var_dump($res);
class DebugSoapClient extends SoapClient {
public $sendRequest = true;
public $printRequest = false;
public $formatXML = false;
public function __doRequest($request, $location, $action, $version, $one_way=0) {
if ($this->printRequest) {
if (!$this->formatXML) {
$out = $request;
}
else {
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->loadxml($request);
$doc->formatOutput = true;
$out = $doc->savexml();
}
echo $out;
}
if ($this->sendRequest) {
return parent::__doRequest($request, $location, $action, $version, $one_way);
}
else {
return '';
}
}
}
impresiones
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.webserviceX.NET/">
<SOAP-ENV:Body>
<ns1:ConversionRate>
<ns1:FromCurrency>USD</ns1:FromCurrency>
<ns1:ToCurrency>EUR</ns1:ToCurrency>
</ns1:ConversionRate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
NULL
pero tendría que cambiar el código real un poco para que esto funcione, que trato de evitar siempre que sea posible (es decir, dejar que las herramientas hacen el trabajo).
Brillante, gracias. – bcmcfc
Probablemente esté bien siempre que estés en la fase de prototipo/evaluación. Más tarde debes probar herramientas "no invasivas". No lo he probado con php/sockets pero violinista y wireshark probablemente hagan el trabajo. O permita que busquen los paquetes de red o configuren su secuencia de comandos para usarlos como un proxy. http://www.fiddler2.com/fiddler2/ – VolkerK
Eso es exactamente, solo quería asegurarme de que el XML era correcto en la fase de configuración inicial. – bcmcfc
No antes, sino después. Ver
SoapClient::__getLastRequest
- Devuelve el XML enviado en la última solicitud de SOAP.
Este método funciona solo si el objeto SoapClient
se creó con la opción de rastreo establecida en TRUE
.
Ejemplo de Manual:
<?php
$client = new SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
?>
Lo estoy usando en este momento, solo quería saber si había visto el XML antes de enviarlo. Sin embargo, creo que eso responde la pregunta: ¡no lo hay! – bcmcfc
Como nota, si tiene el control del servidor SOAP, puede capturar la solicitud SOAP original que se envía al servidor. Para esto, necesita extender el servidor SOAP.
Un código de ejemplo:
class MySoapServer extends SoapServer
{
public function handle($request = null)
{
if (null === $request)
$request = file_get_contents('php://input');
// Log the request or parse it...
}
}
- 1. Obtenga SOAP XML antes de __soapCall?
- 2. Vista previa de la solicitud CURL antes de enviarla
- 3. ¿Cómo obtener una vista previa de xml drawable?
- 4. ¿Es posible obtener una vista previa de una página del mercado de aplicaciones antes de publicarla?
- 5. ¿Cómo puedo obtener una vista previa de los documentos?
- 6. Obtener mensaje SOAP antes de enviarlo al servicio web en .NET
- 7. ¿Cómo puedo enviar SOAP XML a través de Curl y PHP?
- 8. Widget Vista previa Guardar ubicación
- 9. ¿Puedo obtener una vista previa de la barra de acciones en el editor de diseño gráfico?
- 10. Cómo obtener una vista previa de las imágenes de R.drawable. *
- 11. Obtener una vista previa de "git add -u"?
- 12. Imprimir PDF desde ASP.Net sin previa vista
- 13. vista de superposición de cámara, solo para una vista previa?
- 14. Rieles + javascript - vista previa de la imagen antes de cargar
- 15. Problemas de enviar las cabeceras SOAP de autenticación en php
- 16. ¿Vista previa del sitio web de Javascript?
- 17. ¿Cómo puede obtener una vista previa de las actualizaciones que realizará una "Actualización de paquete"?
- 18. Quicklook vista previa incrustada
- 19. ¿Cómo desinfectar la entrada del usuario en PHP antes de enviarlo por correo?
- 20. ¿Cómo enviar una solicitud SOAP y analizar la respuesta SOAP en formato XML en Android?
- 21. Vista previa de la imagen antes de cargarla en IE9
- 22. ¿Cómo puedo obtener una vista previa de una consulta SQL destructiva?
- 23. PHP SOAP HTTP Request
- 24. establecer atributo de etiqueta XML encabezado SOAP en PHP
- 25. Cómo obtener una vista previa de los tamaños de widgets en el diseño antes de un show()?
- 26. ¿Enviar una solicitud SOAP, por dónde empezar?
- 27. ¿es posible obtener una vista previa de las imágenes locales antes de cargarlas a través de un formulario?
- 28. Parámetros del método PHP-Soap Pass
- 29. cómo una vista previa de una imagen antes de subida en varios navegadores
- 30. ¿Generar la imagen de vista previa del archivo de video?
¿Quieres hacer esto como parte de su guión o "sólo" como una herramienta de depuración (por lo que sería mejor no cambiar la secuencia de comandos en absoluto, sino para inspeccionar el objeto con herramientas) – VolkerK
Solo para depurarlo. – bcmcfc