Как определить точный XML, отправляемый в запросе cfhttp SOAP?

При использовании тега cfhttp я включаю заголовок body + через cfhttpparam.

Из-за того, как Coldfusion объединяет XML перед отправкой, я получаю синтаксические ошибки на другом конце.

Мне нужен временный CFC, на который я могу направить свой звонок для тестирования, которое покажет мне точный XML, который я отправляю.

Как определить точный XML, отправляемый в запросе cfhttp?

Я пробовал getHttpRequestData (), но этот метод возвращает структуру, а не синтаксис, который я ищу.


На этот вопрос есть похожая ветка, но она не касается моей конкретной потребности. https://stackoverflow.com/questions/3515452/view-cfhttp-request

<!--- Define Header --->
<cfsavecontent variable="soapHeader">
<cfoutput>
<soap:Header>
    <wsse:Security soap:mustUnderstand="1">
        <wsse:UsernameToken>
            <wsse:Username>MyUser</wsse:Username>
            <wsse:Password>MyPass</wsse:Password>
            <wsse:Nonce>fsdf568sf234k</wsse:Nonce> 
            <wsu:Created>2012-01-07T06:17:56Z</wsu:Created>
        </wsse:UsernameToken>
    <wsse:Security>
</soap:Header> 
</cfoutput>
</cfsavecontent>

<!--- Define Body --->
<cfsavecontent variable="soapBody">
<cfoutput>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">   
    <soap:Body>
        <EmpCpsVerifyConnection xmlns="https://www.vis-dhs.com/EmployerWebService/" />
    </soap:Body>
</soap:Envelope>
</cfoutput>
</cfsavecontent>

<!--- Make SOAP Request --->
<cfhttp 
method="post"
url="https://stage.e-verify.uscis.gov/WebService/EmployerWebServiceV24.asmx?wsdl"
result="httpResponse">

<cfhttpparam
 type="header"
 name="SOAPAction"
    value="https://www.vis-dhs.com/EmployerWebService/EmpCpsVerifyConnection"
    />
<cfhttpparam
 type="header"
 name="Security"
    value="#trim( soapHeader )#"
    /> 
<cfhttpparam
type="body"
    value="#trim( soapBody )#"
    />
</cfhttp>

person Albert Richer    schedule 07.01.2013    source источник


Ответы (3)


Вы можете использовать что-то вроде Fiddler или WireShark, чтобы проверить поток данных. Они оба бесплатны и ОЧЕНЬ полезны для отладки подобных вещей.

person Miguel-F    schedule 07.01.2013
comment
полностью согласен. Fiddler необходим для подобных действий. Вам придется немного повозиться с сертификатами, чтобы заставить CF разговаривать со Fiddler при работе по HTTPS, но это того стоит. В качестве обходного пути настройте атрибуты proxy и proxyport в теге cfhttp и измените URL-адрес на любой URL-адрес, отличный от HTTPS, поскольку вас интересуют только точные данные запроса. - person barnyr; 07.01.2013
comment
Как мне возиться с сертификатами, чтобы Fiddler работал с Coldfusion? Я просмотрел администратора ColdFusion, но не нашел, что нужно сделать. - person Albert Richer; 07.01.2013
comment
Ничего общего с администратором CF. Я считаю, что @barnyr имел в виду необходимость импортировать сертификат Fiddler в хранилище ключей сертификатов Java, поскольку вы говорите по SSL. Посмотрите, как Fiddler работает с SSL. Расшифровка HTTPS-защищенного трафика и это о импорт сертификатов для ColdFusion Импорт сертификатов - ColdFusion . Помните, что после обновления хранилища сертификатов вам нужно будет перезапустить ColdFusion. - person Miguel-F; 08.01.2013
comment
Боковое примечание: для установки программного обеспечения, такого как Fiddler или Wireshark, вам необходимо иметь права администратора на ПК в сети, на которую данные отправляются или принимаются. Люди, использующие общий веб-хостинг, обычно не имеют доступа администратора к своей машине. - person Russ; 08.01.2013

Метод 1. Выведите переменные xml в веб-браузер. Просмотрите исходный код html.

Метод 2 - выведите свои xml-переменные в текстовое поле.

person Dan Bracuk    schedule 07.01.2013

Если вы вызывали методы SOAP через обычный механизм CF, вы можете включить полное ведение журнала xml-пакетов SOAP, отредактировав файл {cf-root} /wwwroot/WEB-INF/client-config.wsdd.

Добавьте или включите следующие строки в элементе ‹globalConfiguration>:

<requestFlow>
 <handler type="log"/>
</requestFlow>
<responseFlow>
 <handler type="log"/>
</responseFlow>

На моей машине журнал попал в {cf-root} /logs/cfserver.log.

person Danny Armstrong    schedule 12.03.2014