json - cURL 和错误 411(内容长度)

标签 json curl

我正在使用 cURL 连接到远程主机。我的一些命令执行得很好(比如通过 POST 进行身份验证和通过 GET 提取信息)。尝试使用 POST 添加有关内容长度的信息时出现奇怪的错误。这是我的语法;

curl -k -i -b sessionid -X POST https://hostname/BeyondTrust/api/public/v3/Workgroups/apiTest/Assets?AssetName=string&DnsName=string&DomainName=string -H "Content-Type: application/json"  -H "Authorization: PS-Auth key=b8e1...2c27; runas=userName; pwd=[password]" -d ""

这是我的输出;

[1] 58164
[2] 58165
-bash: -H: command not found
[2]+  Done                    DnsName=string
HTTP/1.1 411 Length Required
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 27 Oct 2017 14:29:12 GMT
Connection: close
Content-Length: 344

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Length Required</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Length Required</h2>
<hr><p>HTTP Error 411. The request must be chunked or have a content length.</p>
</BODY></HTML>

我已经研究过了,这显然是一个常见问题。 -d "" 没有修复并尝试在 header 中使用 --ignore-content-lengthContent-Length: 0,但我仍然有同样的问题。有人可以指出我正确的方向吗?

最佳答案

您需要引用该 URL,因为它包含一些特殊的 shell 字符。

此输出告诉您出了点问题:

[1] 58164
[2] 58165
-bash: -H: command not found
[2]+  Done                    DnsName=string

由于 URL 查询字符串中的 &,您的命令被拆分为多个作业并导致了一些错误。

将 URL 放在双引号 " 中将解决此问题。

curl -k -i -b sessionid \
-X POST \
"https://hostname/BeyondTrust/api/public/v3/Workgroups/apiTest/Assets?AssetName=string&DnsName=string&DomainName=string"

这样您的 URL 将被正确解释并且 shell 将不会尝试在 background 中启动它.

关于json - cURL 和错误 411(内容长度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46977634/

相关文章:

json - 需要 Perl JSON 使用示例

php - cURL 没有获取 URL 的 HTML 源

php - 使用 file_get_contents vs curl 获取文件大小

python - 如何将复杂的字典保存在 JSON 文件中,然后将其作为字典加载回来?

python - 将结果解析为 JSON

javascript - 尝试从本地文件获取 JSON 数据时出现语法错误

php - 如何使用 cURL 读取 html 正文内容

ruby - Postgresql JSON 列作为 HashWithIndifferentAccess

php - 我的 PayPal 脚本突然停止验证 SSL 证书

bash - 用于将文件上传到我的保管箱的格式错误的路径