Co do tytułu, czy możliwe jest wydrukowanie pliku XML, który został utworzony przez new SoapClient
, przed próbą uruchomienia __soapCall()
, aby upewnić się, że jest poprawny przed faktycznym wysłaniem go na serwer SOAP?Czy mogę wyświetlić podgląd XML, który PHP SOAP chce wysłać przed wysłaniem?
Odpowiedz
Można użyć klasy pochodnej i zastąpić __doRequest() method klasy 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 '';
}
}
}
drukuje
<?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
ale trzeba zmienić rzeczywisty kod trochę dla tej pracy, które staram się unikać, jeśli to możliwe (czyli niech narzędzia do pracy).
Świetne, dzięki. – bcmcfc
To chyba dobrze, o ile jesteś w fazie prototypu/oceny. Później powinieneś wypróbować "nieinwazyjne" narzędzia. Nie próbowałem tego z php/gniazdkami, ale skrzypce i wireshark prawdopodobnie wykonają zadanie. Pozwól im pobrać pakiety sieciowe lub skonfiguruj swój skrypt tak, aby używał ich jako serwera proxy. http://www.fiddler2.com/fiddler2/ – VolkerK
To jest dokładnie to - chciałem tylko upewnić się, że XML był poprawny w początkowej fazie instalacji. – bcmcfc
Nie wcześniej, ale później. Patrz:
SoapClient::__getLastRequest
- Zwraca XML wysłany w ostatnim żądaniu SOAP.
Ta metoda działa tylko wtedy, gdy obiekt SoapClient
został utworzony z opcją śledzenia ustawioną na TRUE
.
przykład z podręcznika:
<?php
$client = new SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
?>
Używam tego w tej chwili, chciałem tylko wiedzieć, czy widziałem XML zanim został wysłany. Myślę, że to odpowiada na pytanie - nie ma! – bcmcfc
Uwaga: jeśli masz kontrolę nad serwerem SOAP, możesz faktycznie złapać oryginalne żądanie SOAP wysłane na serwer. W tym celu należy rozszerzyć serwer SOAP.
Kod próbki:
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. Jak mogę wysłać SOAP XML przez Curl i PHP?
- 2. Jak wyświetlić podgląd rysunków XML?
- 3. Jak wysłać żądanie SOAP w PHP
- 4. jak wyświetlić podgląd XML w Android Studio
- 5. Czy mogę wyświetlić podgląd paska akcji w edytorze graficznym?
- 6. Potwierdź przed wysłaniem formularza
- 7. Jak wysłać żądanie SOAP?
- 8. Jak wysłać zwykły kod XML w odpowiedzi SOAP?
- 9. Wysyłanie żądania Ajax przed wysłaniem formularza
- 10. Jak odseparować dane wejściowe użytkownika w PHP przed wysłaniem wiadomości?
- 11. Czy można wyświetlić podgląd lokalnych zdjęć przed przesłaniem ich za pomocą formularza?
- 12. Subversion: Jak wyświetlić podgląd zatwierdzenia?
- 13. Czego potrzebuję, aby uciec przed wysłaniem zapytania?
- 14. Jak wyświetlić podgląd pliku RDoc?
- 15. Laravel Mail Listener (przed wysłaniem - możliwość anulowania)
- 16. Tworzenie komunikatu SOAP z łańcucha znaków XML całego komunikatu SOAP
- 17. Java: Wyświetl żądanie HttpURLConnection przed wysłaniem
- 18. Wyczyść poprzednie dane przed wysłaniem żądania.
- 19. Uzyskaj komunikat SOAP przed wysłaniem go do usługi WebService w .NET
- 20. Automatyczne prekompilowanie zasobów przed wysłaniem do Heroku
- 21. Jenkins Email-ext Przed wysłaniem skryptu
- 22. Hashowanie haseł przed wysłaniem na serwer
- 23. Wysłać żądanie SOAP, od czego zacząć?
- 24. konwersji SOAP odpowiedzi XML do obiektu PHP lub tablicy
- 25. Ostrzegaj przed wysłaniem e-maili do zewnętrznych domen w Outlooku
- 26. PHP SoapClient zniekształcone xml
- 27. Sprawdzanie autoryzacji http w mvc przed wysłaniem formularza ajaxowego
- 28. PHP SOAP Transfer plików
- 29. Tworzenie połączenia SOAP za pomocą PHP z treścią XML
- 30. Biblioteki SOAP dla PHP
Chcesz zrobić to jako część skryptu lub „tylko” jako narzędzie do debugowania (tak byłoby lepiej, aby nie zmienić scenariusz w ogóle, ale do wglądu obiekt z narzędziami) – VolkerK
Tylko do debugowania. – bcmcfc