WSO2 Недействительная версия протокола: ‹head› Для

Я пытаюсь вызвать http-EndPoint с помощью метода POST в WSO2 Enterprise Integrator. Эта EndPoint получает объект JSON в качестве входных данных и возвращает объект JSON в качестве ответа.

До сих пор я без проблем использовал различные типы http-EndPoints в Enterprise Integrator, но этот конкретный EndPoint возвращает сообщение об ошибке, которое я не могу найти в Google.

Это мой api:

<resource methods="POST" uri-template="/userInfo">
    <inSequence>
        <payloadFactory media-type="json">
            <format>{"jsonrpc": "2.0", "params": {"auth_type": "ADMIN", "auth_name": "someName", "normal_username": "$1", "auth_pass": "myPassword"},"method": "user.MethodName", "id": 0}
            </format>
            <args>
                <arg evaluator="json" expression="$.user"/>
            </args>
        </payloadFactory>
        <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
        <property name="FORCE_HTTP_1.0" scope="axis2" type="STRING" value="true"/>
        <send description="">
            <endpoint>
                <http method="post" uri-template="http://192.168.1.50:1237"/>
            </endpoint>
        </send>
    </inSequence>
    <outSequence>
        <send/>
    </outSequence>
    <faultSequence/>
</resource>

Это мое сообщение об ошибке в консоли:

[EI-Core] ОШИБКА - Нарушение протокола HTTP TargetHandler: недействительная версия протокола: <head> Для: 192.168.1.50:1237

ОБНОВЛЕНИЕ

Я включил журналы проводов в WSO2, чтобы подробно изучить эту проблему. Вот вывод журнала:

[2018-01-15 09:30:46,621] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 << "POST  HTTP/1.0[\r][\n]"
[2018-01-15 09:30:46,622] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 << "Expect: 100-continue[\r][\n]"
[2018-01-15 09:30:46,622] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 << "Content-Type: application/json[\r][\n]"
[2018-01-15 09:30:46,622] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 << "Content-Length: 196[\r][\n]"
[2018-01-15 09:30:46,622] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 << "Host: 192.168.1.50:1237[\r][\n]"
[2018-01-15 09:30:46,622] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 << "Connection: Keep-Alive[\r][\n]"
[2018-01-15 09:30:46,622] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 << "User-Agent: Synapse-PT-HttpComponents-NIO[\r][\n]"
[2018-01-15 09:30:46,622] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 << "[\r][\n]"
[2018-01-15 09:30:46,622] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 << "{"jsonrpc": "2.0", "params": {"auth_type": "ADMIN", "auth_name": "someName", "normal_username": "myUserName", "auth_pass": "myPassword", "remote_addr": "127.0.0.1"},"method": "user.MethodName", "id": 0}"
[2018-01-15 09:30:46,623] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "<head>[\n]"
[2018-01-15 09:30:46,623] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "<title>Error response</title>[\n]"
[2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "</head>[\n]"
[2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "<body>[\n]"
[2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "<h1>Error response</h1>[\n]"
[2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "<p>Error code 400.[\n]"
[2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "<p>Message: Bad HTTP/0.9 request type ('POST').[\n]"
[2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "<p>Error code explanation: 400 = Bad request syntax or unsupported method.[\n]"
[2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "</body>[\n]"

Хотя журнал проводов вернул этот ответ: Message: Bad HTTP/0.9 request type ('POST'), но я могу отправлять почтовые запросы в конечную точку напрямую без каких-либо проблем.

Вот прямой почтовый запрос к конечной точке:

curl -v -H "Content-Type: application/json" -X POST -d '{"jsonrpc": "2.0", "params": {"auth_type": "ADMIN", "auth_name": "someName", "normal_username": "myUserName", "auth_pass": "myPassword", "remote_addr": "127.0.0.1"}, "method": "user.MethodName", "id": 0}' 192.168.1.50:1237

И вот результат вывода:

  • СОСТОЯНИЕ: INIT => дескриптор CONNECT 0x600057950; линия 1423 (соединение # -5000)
  • URL перестроен на: http://192.168.1.50:1237/
  • Добавлено подключение 0. Теперь в кеш-памяти 1 член.
  • Пробуем 5.202.129.107 ...
  • TCP_NODELAY установлен
  • СОСТОЯНИЕ: CONNECT => дескриптор WAITCONNECT 0x600057950; строка 1475 (соединение # 0)
  • Подключен к 192.168.1.50 (192.168.1.50) порт 1237 (# 0)
  • СОСТОЯНИЕ: WAITCONNECT => дескриптор SENDPROTOCONNECT 0x600057950; строка 1592 (соединение # 0)
  • Отмечено для [сохранить активность]: HTTP по умолчанию
  • СОСТОЯНИЕ: SENDPROTOCONNECT => DO handle 0x600057950; строка 1610 (соединение # 0)
    # P11 #
  • загрузка полностью отправлена: 197 из 197 байт
  • СОСТОЯНИЕ: DO => DO_DONE дескриптор 0x600057950; строка 1689 (соединение # 0)
  • СОСТОЯНИЕ: DO_DONE => дескриптор WAITPERFORM 0x600057950; линия 1814 (соединение # 0)
  • СОСТОЯНИЕ: WAITPERFORM => PERFORM handle 0x600057950; линия 1824 (соединение # 0)
  • HTTP 1.0, предположим, что закрытие после тела
  • Отмечено для [закрытия]: HTTP / 1.0 закрывается после тела ‹HTTP / 1.0 200 OK‹ Сервер: BaseHTTP / 0.3 Python / 2.7.9 ‹Дата: вс, 14 января 2018 г. 07:53:37 GMT‹ Content-type: application / json ‹Длина содержимого: 2105‹
  • СОСТОЯНИЕ: ВЫПОЛНИТЬ => ВЫПОЛНЕНО дескриптор 0x600057950; линия 1993 (соединение # 0)
  • multi_done
  • Закрытие соединения 0
  • Кеш теперь содержит 0 участников
  • Срок действия удален

Когда я сравниваю заголовки из WSO2 с заголовками из curl, я не могу понять, в чем различия. Почему запрос WSO2 завершился неудачно, а запрос curl выполнен успешно?


person Masoud Keshavarz    schedule 13.01.2018    source источник
comment
Можете ли вы напрямую обратиться к бэкэнду с помощью curl -IL и опубликовать ответ?   -  person Bee    schedule 13.01.2018
comment
@Bee Спасибо за ответ. Я обновил свой вопрос.   -  person Masoud Keshavarz    schedule 14.01.2018
comment
Что ж, я хотел, чтобы вы выполнили эту команду с реальным запросом (т. Е. С рабочим URL-адресом и допустимой полезной нагрузкой).   -  person Bee    schedule 14.01.2018
comment
@Bee Можете ли вы помочь мне сделать это, пожалуйста? Я пробовал это: curl -H "Content-Type: application/json" -X POST -d '{"jsonrpc": "2.0", "params": {"auth_type": "ADMIN", "auth_name": "someName", "normal_username": "myUserName", "auth_pass": "myPassword", "remote_addr": "127.0.0.1"}, "method": "user.MethodName", "id": 0}' 192.168.1.50:1237 -IL Но он отвечает: Warning: You can only select one HTTP request method! You asked for both POST Warning: (-d, --data) and HEAD (-I, --head).   -  person Masoud Keshavarz    schedule 14.01.2018
comment
Можете ли вы запустить это и опубликовать полученные заголовки ответов? curl -v -H "Content-Type: application/json" -X POST -d '{"jsonrpc": "2.0", "params": {"auth_type": "ADMIN", "auth_name": "someName", "normal_username": "myUserName", "auth_pass": "myPassword", "remote_addr": "127.0.0.1"}, "method": "user.MethodName", "id": 0}' 192.168.1.50:1237   -  person Bee    schedule 14.01.2018


Ответы (4)


Попробуйте добавить это перед посредником <send>.

<property name="FORCE_HTTP_1.0" value="true" scope="axis2"/> 
person Bee    schedule 14.01.2018
comment
Я думал, это решило проблему. Но, к сожалению, я все еще получаю это сообщение об ошибке: «Недействительная версия протокола: ‹head› For: 192.168.1.50:1237» - person Masoud Keshavarz; 14.01.2018
comment
Включены журналы проводов и вызов API. затем опубликуйте свои журналы. lakshanigamage.blogspot.com/ 2015/03 / - person Bee; 14.01.2018
comment
Спасибо. Включение журнала проводов было огромным подспорьем. Я обновил свой вопрос. - person Masoud Keshavarz; 15.01.2018

Сравнивая заголовки из WSO2 и curl, я заметил эту строку в заголовке curl Rebuilt URL to: http://192.168.1.50:1237/. Поэтому я изменил это:

<endpoint>
     <http method="post" uri-template="http://192.168.1.50:1237"/>
</endpoint>

К этому:

<endpoint>
     <http method="post" uri-template="http://192.168.1.50:1237/"/>
</endpoint>
person Masoud Keshavarz    schedule 15.01.2018

Добавьте в последовательность следующие свойства:

  • FORCE_HTTP_CONTENT_LENGTH
  • COPY_CONTENT_LENGTH_FROM_INCOMING

Это решает проблему, но причина пока неизвестна.

person Sem    schedule 02.04.2018

из журнала проводов:

[2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "

Message: Bad HTTP/0.9 request type ('POST').[\n]" [2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "

Error code explanation: 400 = Bad request syntax or unsupported method.[\n]" [2018-01-15 09:30:46,624] [EI-Core] DEBUG - wire HTTP-Sender I/O dispatcher-1 >> "[\n]"

Примечание. Официальная спецификация HTTP 0.9 включала только один метод запроса: GET. вы используете сообщение, которое не поддерживается в HTTP 0.9

Дополнительную информацию о HTTP 0.9 см. в исходной спецификации HTTP W3C.

person Mohamed Farghaly    schedule 18.05.2020