Himanshu
Himanshu

Reputation: 33

Accessing JWT secured Restful API from python script

I can access JWT secured Restful API using curl command as follows

#Get the access Token in a variable ID

export ID=`curl  -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{  "password": "admin",  "rememberMe": true,  "username": "admin"  }' 'http://localhost:8080/api/authenticate' | jq -r .id_token`

#Use this token to access endpoint 

curl 'http://localhost:8080/api/downloads' --header 'Content-Type: application/json' --header 'Accept: application/json' --header "Authorization: Bearer $ID" 

My python script for authentication part and get bearer token is as follows:

import requests

LOGIN_URL = "http://localhost:8080/api/authenticate"
ENDPOINT_URL = 'http://localhost:8080/api/downloads'
PARAMS = {'password': 'admin','rememberMe': True,  'username': 'admin'  }
r1 = requests.post(LOGIN_URL,  data =PARAMS, headers={"Content-Type": "application/json","Accept": "application/json"})
print(r1)

When i am trying to do the same through python script,Authentication request fails with message <Response [400]>

Help needed !

Upvotes: 1

Views: 2214

Answers (1)

Dan-Dev
Dan-Dev

Reputation: 9430

You are passing a dictionary where you should be passing JSON.

Try using json not data and pass the dictionary:

import requests

LOGIN_URL = "https://httpbin.org/post"
PARAMS = {'password': 'admin','rememberMe': True,  'username': 'admin'  }
r1 = requests.post(LOGIN_URL,  json=PARAMS, headers={"Content-Type": "application/json","Accept": "application/json"})
print(r1.text)

or pass a string and use data:

import requests

LOGIN_URL = "https://httpbin.org/post"
PARAMS = '{"password": "admin", "rememberMe": true, "username": "admin"}'
r1 = requests.post(LOGIN_URL, data=PARAMS, headers={"Content-Type": "application/json", "Accept": "application/json"})
print(r1.text)

Upvotes: 1

Related Questions