You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 EI调用HTTP POST端点报错:无效协议版本问题排查

解决WSO2 EI调用Python BaseHTTP端点的400错误问题

我仔细对比了你的WSO2请求日志和curl请求日志,发现问题出在请求行的格式不符合HTTP规范,而Python的BaseHTTP服务器对格式校验非常严格。

问题根源

从Wire Log可以看到,WSO2发送的请求行是:

POST HTTP/1.0

这不符合HTTP标准的请求行格式——正确的格式应该是 [METHOD] [PATH] [HTTP VERSION],这里缺少了必须的路径部分(比如/)。

而curl自动为你补充了根路径/,所以发送的请求行是:

POST / HTTP/1.1

这完全符合规范,因此Python服务器接受了请求并返回200响应。

为什么WSO2会生成错误的请求行?因为你的HTTP端点配置里,uri-template只指定了地址和端口,没有包含路径:

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

修复方案

1. 给端点添加根路径/

修改你的端点配置,在uri-template末尾加上/:

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

修改后,WSO2会生成正确的请求行:POST / HTTP/1.0(因为你设置了FORCE_HTTP_1.0),满足Python服务器的格式要求。

2. (可选)移除FORCE_HTTP_1.0属性

从curl的响应可以看到,目标服务器支持HTTP/1.0,但如果没有特殊需求,建议移除FORCE_HTTP_1.0属性,让WSO2使用默认的HTTP/1.1协议,这样请求会更规范,也能避免潜在的兼容性问题:

<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"/>
  <!-- 移除FORCE_HTTP_1.0属性 -->
  <send description="">
    <endpoint>
      <http method="post" uri-template="http://192.168.1.50:1237/"/>
    </endpoint>
  </send>
</inSequence>

验证结果

重新部署修改后的API,再次调用时,Wire Log里会显示正确的请求行,Python服务器将返回正常的JSON响应,不再出现400错误。

补充说明:你之前调用其他HTTP端点没问题,是因为那些端点的服务器对请求格式的容错性更高,允许缺少路径的请求;而Python的BaseHTTP服务器遵循严格的HTTP规范,所以触发了错误。

内容的提问来源于stack exchange,提问作者Masoud Keshavarz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:10:04