WSO2 Недопустимая версия протокола: <head> Для
Я пытаюсь вызвать http-EndPoint с методом POST в WSO2 Enterprise Integrator. Эта конечная точка получает объект 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
ОБНОВИТЬ
Я включил Wire Logs в 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
И вот результат вывода:
- STATE: INIT => CONNECT handle 0x600057950; линия 1423 (соединение № -5000)
- Перестроенный URL-адрес: http://192.168.1.50:1237/
- Добавлено соединение 0. Кеш теперь содержит 1 участника
- Попытка 5.202.129.107...
- TCP_NODELAY установлено
- STATE: CONNECT => WAITCONNECT handle 0x600057950; линия 1475 (соединение № 0)
- Подключен к 192.168.1.50 (192.168.1.50) порт 1237 (# 0)
- STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x600057950; линия 1592 (соединение № 0)
- Помечено для [сохранить в живых]: HTTP по умолчанию
- СОСТОЯНИЕ: SENDPROTOCONNECT => DO handle 0x600057950; линия 1610 (соединение № 0)
POST / HTTP / 1.1 Хост: http://192.168.1.50:1237/ User-Agent: curl/7.56.1 Принять: / Content-Type: application / json Content-Length: 197
- загрузка полностью отправлена: 197 из 197 байтов
- СОСТОЯНИЕ: DO => DO_DONE handle 0x600057950; линия 1689 (соединение № 0)
- STATE: DO_DONE => WAITPERFORM handle 0x600057950; линия 1814 (соединение № 0)
- СОСТОЯНИЕ: WAITPERFORM => PERFORM handle 0x600057950; линия 1824 (соединение № 0)
- HTTP 1.0, предположим, что закрыть после тела
- Помечено как [закрытие]: HTTP / 1.0 закрытие после тела
- СОСТОЯНИЕ: ВЫПОЛНЕНО => СДЕЛАНО ручка 0x600057950; линия 1993 (соединение № 0)
- multi_done
- Закрытие соединения 0
- Кеш теперь содержит 0 членов
- Срок действия очищен
Когда я сравниваю заголовки из WSO2 с заголовками из curl, я не могу понять, в чем различия. Почему запрос WSO2 не выполнен, а запрос curl выполнен успешно?
3 ответа
Сравнивая заголовки из 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>
Попробуйте добавить это до <send>
посредник.
<property name="FORCE_HTTP_1.0" value="true" scope="axis2"/>
Добавьте следующие свойства в последовательность:
FORCE_HTTP_CONTENT_LENGTH
COPY_CONTENT_LENGTH_FROM_INCOMING
Это решает проблему, но причина до сих пор неизвестна.
Из журнала проводов:
[2018-01-15 09:30:46,624] [EI-Core] DEBUG - подключение диспетчера ввода-вывода HTTP-отправителя-1 >> "
Сообщение: Неверный тип запроса HTTP/0.9 ('POST').[\ N]" [2018-01-15 09:30:46,624] [EI-Core] DEBUG - подключение диспетчера ввода-вывода HTTP-отправителя-1 >> "
Объяснение кода ошибки: 400 = неверный синтаксис запроса или неподдерживаемый метод. [\ N]" [2018-01-15 09:30:46,624] [EI-Core] DEBUG - подключение диспетчера ввода-вывода HTTP-отправителя-1 >> "[\n]"
Примечание. Официальная спецификация HTTP 0.9 включала только один метод запроса: GET. вы используете сообщение, которое не поддерживается в HTTP 0.9
Дополнительные сведения о HTTP 0.9 см. В исходной спецификации HTTP W3C.