在Linux中发送带有JSON数据的POST请求

时间:2018-07-30 01:35:36

标签: linux bash api ssl curl

我首先与Postman一起测试一个api以执行简单的POST请求,并且一切正常,因为在主体部分添加值很容易。

现在,我需要从Linux控制台执行相同的操作。我尝试使用curl命令。

curl -X POST -H "Content-Type: application/json" -d'{"DeviceId":"L","TransactionValue":"360","RSSI":"360","Time":"2018-07-30T11:02:00"}' https://IPADDRESS.com.au

基于卷曲的其他命令,但是每次我在Linux控制台上显示此error log时:

(35) ssl_handshake returned - PolarSSL: (-0x7780) SSL - A fatal alert message was received from our peer

我不明白为什么我在Linux控制台上而不是Postman上有问题,这是什么问题。

非常感谢。 干杯!

2 个答案:

答案 0 :(得分:0)

您的命令是正确的,问题可能出在您具有过时的curl / PolarSSL版本,因为它似乎可以与邮递员一起使用。

以下是使用curl 7.61.0发布到httpbin.org的示例:

$ curl -X POST https://httpbin.org/post -H "Content-type: application/json" -d '{"DeviceId":"L","TransactionValue":"360","RSSI":"360","Time":"2018-07-30T11:02:00"}'
{
  "args": {},
  "data": "{\"DeviceId\":\"L\",\"TransactionValue\":\"360\",\"RSSI\":\"360\",\"Time\":\"2018-07-30T11:02:00\"}",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Connection": "close",
    "Content-Length": "83",
    "Content-Type": "application/json",
    "Host": "httpbin.org",
    "User-Agent": "curl/7.43.0"
  },
  "json": {
    "DeviceId": "L",
    "RSSI": "360",
    "Time": "2018-07-30T11:02:00",
    "TransactionValue": "360"
  },
  "origin": "178.197.231.122",
  "url": "https://httpbin.org/post"
}

如果前面的示例可行,请尝试设置主机,例如:

$ curl -X POST https://IPADDRESS.com.au \
-H "Host: httpbin.org" \
-H "Content-type: application/json" \
-d '{"DeviceId":"L","TransactionValue":"360","RSSI":"360","Time":"2018-07-30T11:02:00"}'

请注意,-H "Host: httpbin.org"用您自己的域替换。

答案 1 :(得分:0)

问题几乎可以肯定是后端ssl库,在您的情况下是PolarSSL / mbedTLS,看来您的版本是2014年或更早的版本。

您正在使用哪个版本的PolarSSL?您可以通过运行curl --version来查找结果,它输出什么?

尝试更新到最新版本的MbedTLS并重新编译curl,然后重试,您可以在此处找到最新版本:https://tls.mbed.org/tech-updates/releases

(顺便说一句,似乎PolarSSL和mbedTLS指的是同一件事,他们只是在2015年更改了名称。错误消息将其称为PolarSSL的事实意味着您使用的是2014年以来的旧版本或以上

相关问题