Steven Aguilar
Steven Aguilar

Reputation: 3049

curl: request is missing authentication header - authentication header there

to Add more context: I am trying to make a curl request to the Seamless.gov API. On a different computer the same curl command works. However, when I run the curl command on my machine it doesn't work.

curl -X GET -H "Content-Type: application/json" -H "Date: 1530285602" -H "Authorization: HMAC-SHA256 api_key=XXXXXXXX nonce=12335 signature=XXXXXXXXXXXXX" -d 'false' https://nycopp.seamlessdocs.com/api/form/CO1708XXXXXXXXXXXXX/elements

I have the following version of curl:

curl: stable 7.60.0 (bottled), HEAD [keg-only] Get a file from an HTTP, HTTPS or FTP server https://curl.haxx.se/ /usr/local/Cellar/curl/7.60.0 (423 files, 3MB)   Poured from bottle on 2018-06-29 at 11:44:32 From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/curl.rb
==> Dependencies Build: pkg-config ✔ Optional: openssl ✘, rtmpdump ✘, libssh2 ✘, c-ares ✘, libmetalink ✘, nghttp2 ✘
==> Options
--with-c-ares   Build with C-Ares async DNS support
--with-gssapi   Build with GSSAPI/Kerberos authentication support.
--with-libmetalink  Build with libmetalink support.
--with-libssh2  Build with scp and sftp support
--with-nghttp2  Build with HTTP/2 support (requires OpenSSL)
--with-openssl  Build with OpenSSL instead of Secure Transport
--with-rtmpdump     Build with RTMP support
--HEAD  Install HEAD version
==> Caveats This formula is keg-only, which means it was not symlinked into /usr/local, because macOS already provides this software and installing another version in parallel can cause all kinds of trouble.

If you need to have this software first in your PATH run:   echo 'export PATH="/usr/local/opt/curl/bin:$PATH"' >> ~/.bash_profile

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/curl/lib
    CPPFLAGS: -I/usr/local/opt/curl/include For pkg-config to find this software you may need to set:
    PKG_CONFIG_PATH: /usr/local/opt/curl/lib/pkgconfig

Same curl command works on another machine but not on mines, could it be an issue with the version or the operating system. I'm running on Mac OS High Sierra

 {
    "error": true,
    "error_log": [
        {
            "error_code": "missing_header",
            "error_message": "Request is missing header: `Authorization`",
            "error_description": "{\"Host\":\"XXXX.seamlessdocs.com\",\"Connection\":\"close\",\"X-Real-IP\":\"161.185.7.10\",\"X-Forwarded-For\":\"161.185.7.10\",\"X-Forwarded-Host\":\"nycopp.seamlessdocs.com\",\"X-Forwarded-Port\":\"443\",\"X-Forwarded-Proto\":\"https\",\"X-Original-URI\":\"\\\/api\\\/form\\\/CO1XXXXXXXXXXXXXXX\\\/elements\",\"X-Scheme\":\"https\",\"Content-Length\":\"5\",\"user-agent\":\"curl\\\/7.54.0\",\"accept\":\"*\\\/*\",\"content-type\":\"application\\\/json\",\"date\":\"1530285602\",\"authorization\":\"HMAC-SHA256 api_key=XXXXXXXXXXXXXXX nonce=12335 signature=XXXXXXXXXXXXXX\"}"
        },
        {

Upvotes: 0

Views: 2127

Answers (1)

mbuechmann
mbuechmann

Reputation: 5750

There is one hint in the error message:

==> Caveats This formula is keg-only, which means it was not symlinked into /usr/local, because macOS already provides this software and installing another version in parallel can cause all kinds of trouble.

OS X already has curl installed and this binary is used. This version does not work with your request. To find out where homebrew has installed curl execute:

ll /usr/local/opt/curl

You will get an output like that:

lrwxr-xr-x  1 maltebuchmann  admin    21B Jun 30 09:50 /usr/local/opt/curl -> ../Cellar/curl/7.60.0

With that info you can execute your above command:

/usr/local/Cellar/curl/7.60.0/bin/curl -X GET -H "Content-Type: application/json" -H "Date: 1530285602" -H "Authorization: HMAC-SHA256 api_key=XXXXXXXX nonce=12335 signature=XXXXXXXXXXXXX" -d 'false' https://nycopp.seamlessdocs.com/api/form/CO1708XXXXXXXXXXXXX/elements

You can follow the printed instructions to add the installation folder to your path:

If you need to have this software first in your PATH run: echo 'export PATH="/usr/local/opt/curl/bin:$PATH"' >> ~/.bash_profile

Or, you can forcefully link it with homebrew:

brew link curl --force

But do this at your own risk :)

Upvotes: 1

Related Questions