Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Attribute Error for variable header passed in Post Request

I get an AttributeError when I try to pass the header for making a post request to get a Token.

Code:

import requests

endpoint = 'https://api.website/v1/token'
header ={
    'Content-Type: application/x-www-form-urlencoded',
    'Cache-Control: no-cache'
}
data = {
    'username=<username>',
    'password=<password>',
    'grant_type=password',
    'client_id=api'
}
request = requests.post(endpoint, headers=header, data=data, verify=False)
print(request)

The cURL by using –data-urlencode:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

curl -X POST \
  https://api.website/v1/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Cache-Control: no-cache' \
  --data-urlencode username=<YourUsername> \
  --data-urlencode password=<YourPassword> \
  --data-urlencode grant_type=password \
  --data-urlencode client_id=token-api

Error:

Traceback (most recent call last):
  File "c:\Learning\API.py", line 14, in <module>
    request = requests.post(endpoint, headers=header, data=data, verify=False)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 115, in post
    return request("post", url, data=data, json=json, **kwargs)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 573, in request
    prep = self.prepare_request(req)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 484, in prepare_request
    p.prepare(
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\models.py", line 369, in prepare
    self.prepare_headers(headers)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\models.py", line 489, in prepare_headers
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 115, in post
    return request("post", url, data=data, json=json, **kwargs)                                   t/API.py
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)                                      False)
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessio", line 115, in postns.py", line 573, in request
    prep = self.prepare_request(req)                                                              ", line 59, in request
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 484, in prepare_request                                                              ns.py", line 573, in request
    p.prepare(
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\modelsns.py", line 484, in prepare_request.py", line 369, in prepare
    self.prepare_headers(headers)                                                                 .py", line 369, in prepare
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\models.py", line 489, in prepare_headers  
AttributeError: 'set' object has no attribute 'items'

I tried to change the single quotes with double quotes,but it will have the same Error.

I also tried to use the curl withoout the –data-urlencode:

-d 'username=<YourUsername>&password=<YourPassword>&grant_type=password&client_id=token-api'

code:

data = {
'username=<YourUsername>&password=<YourPassword>&grant_type=password&client_id=token-api'
}

But got the same error

>Solution :

Your code has a simple mistake with the headers… possibly also with the data, but I’m not sure on that one. Below is the code with inline explanations.

import requests

endpoint = 'https://api.website/v1/token'
# Below you have a set and it is expecting a dictionary
# header = {
#     'Content-Type: application/x-www-form-urlencoded',
#     'Cache-Control: no-cache'
# }

# Below is a dictionary, notice I only added quotes before and after the colon.
# Now it has the keys and values like "name_of_header": "value"
# single or double quotes do not matter here.
header = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Cache-Control': 'no-cache'
}
data = {
    'username=<username>',
    'password=<password>',
    'grant_type=password',
    'client_id=api'
}
request = requests.post(endpoint, headers=header, data=data, verify=False)
print(request)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading