在Camel中将查询参数作为主URL的一部分发送,而不是通过Exchange.HTTP_QUERY

时间:2016-04-15 14:20:06

标签: apache-camel

在camel 2.16.1中我通过Camel的HTTPS POST组件发送HTTP4请求。网址如下所示: -

https4://debraj:debraj@example.com/oms-api/?Action=UpdateOrderInformation&ServiceName=OMS&Signature=25566099c0b6b6c5123bbfede4c91590512050668f957e2a43ef982a0dcf1c00&Timestamp=2016-04-14T12%3A44%3A17+0530&Version=1.0

身体看起来如下: -

{
  "Request": {
    "Orders": [
      {
        "id_sales_order": 397,
        "address_billing": {
          "first_name": "John",
          "last_name": "Doe",
          "phone": "1234567",
          "phone2": "1234",
          "address1": "Sesamestreet 123",
          "city": "Berlin",
          "postcode": "12345",
          "country": "Germany"
        }
      }
    ]
  }
}

它回来了我: -

{
    "ErrorResponse": {
        "Head": {
            "RequestAction": "UpdateOrderInformation",
            "ErrorType": "Sender",
            "ErrorCode": "7",
            "ErrorMessage": "E007: Login failed. Signature mismatch"
        },
        "Body": ""
    }
}

如果通过在Exchange.HTTP_QUERY下发送查询参数来做出相同的请求,那么它会给我正确的回复: -

headers.put(Exchange.HTTP_QUERY, "Action=UpdateOrderInformation&ServiceName=OMS&Signature=25566099c0b6b6c5123bbfede4c91590512050668f957e2a43ef982a0dcf1c00&Timestamp=2016-04-14T12%3A44%3A17+0530&Version=1.0")

{
  "SuccessResponse": {
    "Head": {
      "RequestId": "",
      "RequestAction": "UpdateOrderInformation",
      "ResponseType": "",
      "Timestamp": "2015-07-02T12:26:03+0200"
    },
    "Body": []
}

有人可以告诉我: -

  • 为什么上述两种情况表现不同?
  • 是否始终建议在Exchange.HTTP_QUERY下发送查询参数?我问这个是因为使用主URL发送查询参数并不总是失败。

如果对我的问题不清楚,请提出要求,我会尝试解释。

1 个答案:

答案 0 :(得分:0)

这是因为您的查询参数每次都在变化,即您的签名发生变化。您的签名有时可能只是在其中带有+符号或空格(或类似的字符),然后http4将符号转换为%20(或其他内容,具体取决于字符)。您可以检查签名失败的时间,并确定是否是这种情况。我不记得过去我是如何解决这个问题的,但似乎你已经有了解决方案。希望这澄清。