【问题标题】:Sending a POST request with JSON data in Linux在 Linux 中发送带有 JSON 数据的 POST 请求
【发布时间】:2019-01-06 05:36:02
【问题描述】:

我首先使用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

还有其他基于 curl 的命令,但每次我在我的 Linux 控制台上显示这个 error log 时:

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

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

提前非常感谢。 干杯!!

【问题讨论】:

  • 而不是https://IPADDRESS.com.au,您使用的是实际的https url,而您只是在向我们屏蔽它? “对等”错误告诉我它与 SSL 有关,一些谷歌搜索显示它与使用的 ssl 版本/密码有关
  • @ivanivan:我,错误开头的“SSL”告诉我它与 SSL 相关:D
  • @Amadan SSL 在服务器端,对不起
  • @ivanivan 是的,我确实使用了实际的 https url,我只是隐藏了真实的 url。我在服务器端没有访问权限。你觉得我无能为力吗?
  • 这似乎涉及您的 cURL 编译时所针对的 SSL 库。什么版本的 cURL 在什么硬件上的什么发行版中?

标签: linux bash api ssl curl


【解决方案1】:

您的命令是正确的,问题可能是您的 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" 将其替换为您自己的域。

【讨论】:

  • 他的 libcurl 是使用 OpenSSL 的竞争对手 PolarSSL/mbedTLS 编译的。这里不涉及 OpenSSL。 curl 支持multiple SSL backend libraries,并且在编译时选择使用哪一种curl。
【解决方案2】:

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

您使用的是哪个版本的 PolarSSL?你可以通过运行curl --version 来发现,它输出了什么?

尝试更新到最新版本的MbedTLS并重新编译curl,再试一次,你可以在这里找到最新版本:https://tls.mbed.org/tech-updates/releases

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

【讨论】:

  • 是的,看来我的 curl 版本很旧。这里 'curl --version' 的输出:'curl 7.40.0 (mips-openwrt-linux-gnu) libcurl/7.40.0 PolarSSL/1.3.14 Protocols: file ftp ftps http https Features: IPv6 Largefile SSL' 我是将尝试使用您给我的链接对其进行更新。谢谢!
  • 我终于能够更新最新版本的 MbedTLS。现在我的卷曲工作。谢谢你的帮助伙伴!
猜你喜欢
  • 2021-10-07
  • 2014-06-06
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2014-06-16
  • 2019-01-11
相关资源
最近更新 更多