Guguweb - soaphttps://www.guguweb.com/2022-01-14T21:09:57+01:00Freelance developer and sysadminHow to log raw XML requests and responses in Suds2019-12-11T12:34:09+00:002022-01-14T21:09:57+01:00Augusto Destrerotag:www.guguweb.com,2019-12-11:/2019/12/11/how-to-log-raw-xml-requests-and-responses-in-suds/<p>Suppose you are using Suds and you want to log every raw XML request and response to a SOAP service. This can be useful to debug an integration with a SOAP web service.</p>
<p>You can write a <code>MessagePlugin</code> class for this, and use it in the construction of your client …</p><p>Suppose you are using Suds and you want to log every raw XML request and response to a SOAP service. This can be useful to debug an integration with a SOAP web service.</p>
<p>You can write a <code>MessagePlugin</code> class for this, and use it in the construction of your client.</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">logging</span>
<span class="kn">from</span> <span class="nn">xml.dom.minidom</span> <span class="kn">import</span> <span class="n">parseString</span>
<span class="kn">from</span> <span class="nn">suds.client</span> <span class="kn">import</span> <span class="n">Client</span>
<span class="kn">from</span> <span class="nn">suds.plugin</span> <span class="kn">import</span> <span class="n">MessagePlugin</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="vm">__name__</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">SudsLoggerPlugin</span><span class="p">(</span><span class="n">MessagePlugin</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">pretty_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xml_content</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">dom</span> <span class="o">=</span> <span class="n">parseString</span><span class="p">(</span><span class="n">xml_content</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">dom</span><span class="o">.</span><span class="n">toprettyxml</span><span class="p">())</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">exception</span><span class="p">(</span><span class="s1">'Cannot log XML'</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">sending</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pretty_log</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">envelope</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">received</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pretty_log</span><span class="p">(</span><span class="n">context</span><span class="o">.</span><span class="n">reply</span><span class="p">)</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="s1">'your/wsdl/path/here?wsdl'</span><span class="p">,</span>
<span class="n">plugins</span><span class="o">=</span><span class="p">[</span> <span class="n">SudsLoggerPlugin</span><span class="p">()</span> <span class="p">])</span>
</code></pre></div>