Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cURL and Error 411 (Content Length)

Tags:

json

curl

I'm using cURL to connect to a remote host. Some of my commands execute just fine (like authentication via POST and pulling information via GET). I'm getting a weird error when trying to use a POST to add information with regards to content length. This is my syntax;

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 ""

This is my output;

[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>

I've researched it, and this is a common problem, apparently. -d "" does not fix and have tried --ignore-content-length and Content-Length: 0 in the headers, but I still have the same issue. Can someone point me in the right direction?

like image 928
Kimomaru Avatar asked Oct 30 '25 21:10

Kimomaru


1 Answers

You need to quote the URL because it contains some special shell characters.

This output tells you something went wrong:

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

Your command got split into multiple jobs and resulted in some errors because of the & in the URL's query string.

Putting the URL in double-quotes " will fix the issue.

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

This way your URL will be interpreted properly and the shell won't try to start it in the background.

like image 128
drew010 Avatar answered Nov 01 '25 12:11

drew010