I am trying to utilise the authentication here: https://api.graphnethealth.com/system-auth using Python urllib3 and have the following
import urllib3 http = urllib3.PoolManager() resp = http.request( "POST", "https://core.syhapp.com/hpca/oauth/token", headers={ "Content-Type": "application/x-www-form-urlencoded" }, fields={ "grant_type": "client_credentials", "client_id": "YYYYYYYYY", "client_secret": "XXXXXXXXX" } ) print(resp.data)
I get an error saying that grant_type
has not been sent.
b'{rn "error": {rn "code": "400",rn "message": "Validation Errors",rn "target": "/oauth/token",rn "details": [rn {rn "message": "grant_type is required",rn "target": "GrantType"rn },rn {rn "message": "Value should be one of the following password,refresh_token,trusted_token,handover_token,client_credentials,pin",rn "target": "GrantType"rn }rn ]rn }rn}'
Any suggestions?
Advertisement
Answer
You’re telling it the data will be form-urlencoded, but that’s not what request
does by default. I believe you need:
resp = http.request( "POST", "https://core.syhapp.com/hpca/oauth/token", fields={ "grant_type": "client_credentials", "client_id": "YYYYYYYYY", "client_secret": "XXXXXXXXX" }, encode_multipart = False )
request
replaces the Content-Type
header, so there’s no point in specifying it at all.