Search code examples
linuxbashcurlnetwork-programmingwget

curl + Unauthorized: Access is denied due to invalid credentials


I am using the following bash script in order to get info from curl from --> https://komat/api/v1/jedh ( from chrome browser page we get the expected results but not from curl )

#!/bin/bash
url="https://komat/api/v1/jedh"
user="toto"
password="blomatis!"
curl_opts=(
    --insecure
    --request GET
    --header "Accept: application/json"
    --header "Content-Type: application/json"
    --header "Authorization: Basic $( echo "$user:$password" | base64 )"
)

curl "${curl_opts[@]}" "$url"

but the output that we get is

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>
  <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
 </fieldset></div>
</div>
</body>
</html>

from the windows machine on the browser page we get the right output but not from the Linux machine by curl

any suggestion on how to resolve the above problem?

our machine version

more /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

Solution

  • Mistake just here:

     echo "$user:$password" | base64
    

    When you try to encode this string, you encode the string with the newline.

    Just add -n parameter for echo command:

     echo -n "$user:$password" | base64