Lucee Soap 400 Ошибка; отлично работает как есть в CF

Я пытаюсь выполнить вызов CFHTTP, используя Lucee 4.5. Тестовый код на моей основной рабочей станции в порядке (работает CF 10), но при копировании именно на ноутбук с Lucee, если происходит сбой с ошибкой 400, отправляются недопустимые заголовки. Смотри ниже

#XML Being Passed
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SOAP-ENV:Body>
    <m:Authenticate xmlns:m="http://foo.com/2005/">     
      <m:userName>xxxxx</m:userName>
      <m:password>xxxxx</m:password>
    </m:Authenticate>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>


#Partial Codebase; 'variable' is XML posted above
<cfhttp url="http://xxxxxxx?WSDL" method="post" result="theCFHTTP" compression="false">
            <cfhttpparam type="HEADER" name="Content-Type" value="text/xml; charset=utf-8">
            <cfhttpparam type="HEADER" name="Accept" value="application/soap+xml, application/dime, multipart/related, text/*">
            <cfhttpparam type="HEADER" name="User-Agent" value="Axis/1.1">

            <cfhttpparam type="HEADER" name="Cache-Control" value="no-cache">
            <cfhttpparam type="HEADER" name="Pragma" value="no-cache">
            <cfhttpparam type="HEADER" name="SOAPAction" value="http://foo.com/2005/Authenticate">
            <cfhttpparam type="HEADER" name="Content-Length" value="#len(soap)#">
            <cfhttpparam type="xml" name="body" value="#soap#">
        </cfhttp>

Я очень новичок в Lucee и никогда не использовал Railo, поэтому, если есть уникальные кодировки или другие параметры конфигурации, которые необходимо выполнить, я был бы признателен за помощь.

Изменить. Дальнейшие тесты показали, что я не могу использовать CFHTTP на любой странице за пределами самого ноутбука. Все внешние URL-адреса выдают сообщение о неверном заголовке 400.

Я также добавил compression=false, чтобы Lucee не автоматически отправляла содержимое GZip по URL-адресу запроса.

Заголовки возврата моей рабочей машины:

  • Кодировка: utf-8
  • Заголовок: HTTP/1.1 200 OK Cache-Control: private, max-age=0 Content-Type: text/xml; charset=utf-8 Сервер: Microsoft-IIS/8.0 X-AspNet-Версия: 4.0.30319 X-Powered-By: ASP.NET Дата: среда, 25 марта 2015 г., 14:58:03 по Гринвичу Соединение: закрыть Длина содержимого: 603
  • MIME-тип: text/xml

Заголовки возврата неисправной машины:

  • Кодировка: us-ascii
  • Заголовок: HTTP/1.1 400 Bad Request Content-Type: text/html; charset=us-ascii Сервер: Microsoft-HTTPAPI/2.0 Дата: среда, 25 марта 2015 г., 15:06:18 по Гринвичу Соединение: закрыть Content-Length: 339
  • MIME-тип: text/html

19 МАЯ ИЗМЕНИТЬ:

Я протестировал каждую из следующих настроек отдельно в вызове CFHTTP на основе ответа Фабио:

  1. Я удалил параметр заголовка Content-Type или
  2. Параметр тела изменен с «xml» на «тело».

Ни один из них не работал, хотя мое сообщение об ошибке изменилось на 400 Bad Request. Дамп вызова CFHTTP говорит, что я отправляю недопустимый XML, хотя независимые проверки подтверждают, что он действительно действителен. Сбой при вызове аутентификации токена.


person justacoder    schedule 25.03.2015    source источник
comment
Так как у вас есть один, который работает, и один, который не работает. Я бы запустил ваш инструмент мониторинга сети (инструменты браузера тоже могут это сделать) и сравнил бы заголовки, отправляемые с рабочего сервера и с неработающего сервера. Тогда сообщите о том, что вы видите, и мы пойдем оттуда.   -  person Miguel-F    schedule 25.03.2015
comment
Я добавил ваш запрос.   -  person justacoder    schedule 25.03.2015
comment
Нас больше интересуют заголовки запроса, так как они, предположительно, вызывают проблему. Можете ли вы сравнить их и включить то, что вы найдете. Также есть ли брандмауэр, прокси-сервер или что-то еще между неисправной машиной и Интернетом? Можете ли вы просматривать веб-сайт на том же компьютере с помощью браузера?   -  person Miguel-F    schedule 25.03.2015
comment
Там нет брандмауэра или прокси (запрос SOAP работает с моего личного ноутбука). Веб-сайт, на который я звоню, существует при просмотре в браузере. Я попытаюсь получить заголовки запроса.   -  person justacoder    schedule 25.03.2015
comment
Это не работает. Пожалуйста, смотрите мой отредактированный пост.   -  person justacoder    schedule 19.05.2015
comment
@AngrySpartan вы когда-нибудь решали это?   -  person Mingo    schedule 22.07.2016
comment
Нет. К сожалению, проект был отложен и не смог вернуться.   -  person justacoder    schedule 27.07.2016


Ответы (1)


У меня была такая же проблема сегодня. Наконец то я понял!

Я пронюхал сетевой трафик с помощью tcpdump, и оказалось, что наш запрос к IIS7 дважды содержал заголовок Content-Type, что привело к уродливому

Неверный запрос — ошибка неверного имени заголовка

Проблема в параметре body:

<cfhttpparam type="xml" name="body" value="#soap#">

Люси соответственно устанавливает заголовок Content-Type в text/xml; utf-8... затем снова устанавливает его на основе другого параметра:

<cfhttpparam type="HEADER" name="Content-Type" value="text/xml; charset=utf-8">

У вас есть два варианта:

  1. оставьте type="xml" для вашего тега cfhttpparam и удалите явный параметр MIME+charset
  2. измените type="xml" на type="body" и вручную установите все ваши заголовки
person Fabio B.    schedule 27.04.2015
comment
Что бы я изменил, если бы мне пришлось вручную устанавливать заголовки? Я их уже уточняю, нет? - person justacoder; 18.05.2015
comment
Правильно, мне также нужно было установить их вручную. Только не делайте этого дважды: измените type=XML на type=BODY, и все готово. - person Fabio B.; 19.05.2015
comment
Фабио, чувак, ты сукин сын сэкономил мне кучу работы!!! как можно предположить, что type=xml также устанавливает заголовок Content-Type... большое спасибо! - person Raffael Meier; 28.05.2020