pythonconfluenceconfluence-rest-apiatlassian-python-api

requests.exceptions.HTTPError: 401 Client Error atlassian-python-api


I am trying to connect to a Confluence page using the python wrapper on the API (as I am not familiar with any of this) but I keep getting the following error:

requests.exceptions.HTTPError: 401 Client Error

I know that people talk about this being caused by the necessity of using an API token but the page runs on an old version of Confluence and I have been told that we cannot use access tokens.

So has anyone any other idea? Here's a small code:

from atlassian import Confluence

confluence = Confluence(
    url='https://address',
    username='name',
    password='pwd'
    )

confluence.create_page(
    space='Test',
    title='A title',
    body='something')

I have tried to use an older version of atlassian-python-api just in case there was some conflict but it got me the same error.


Solution

  • Your code looks ok. Authenticating to Confluence using Basic Auth should work without generating an API token, afaik.

    The 401 status definitely suggests a problem with the authentication though. The obvious reason for this would be of course wrong credentials, but I assume that you have double checked that the credentials work when interactively logging into confluence with a browser.

    To get a better sense of the error, you can import logging to debug your requests and response:

    from atlassian import Confluence
    import logging
    
    logging.basicConfig(filename='conf_connect.log', filemode='w', level=logging.DEBUG)
    
    try: 
        c = Confluence(url='https://conf.yoursystem.com', username='name', password='pwd')
        # atlassian API does not raise error on init if credentials are wrong, this only happens on the first request
        c.get_user_details_by_username('name')
    
    except Exception as e:
        logging.error(e)
    

    The Confluence module internally also uses logging, so the requests and responses will appear in your conf_connect.log logfile:

    DEBUG:atlassian.rest_client:curl --silent -X GET -H 'Content-Type: application/json' -H 'Accept: application/json'  'https://conf.yoursystem.com/rest/api/user?username=name'
    DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): conf.yoursystem.com:443
    DEBUG:urllib3.connectionpool:https://conf.yoursystem.com:443 "GET /rest/api/user?username=name HTTP/1.1" 401 751
    DEBUG:atlassian.rest_client:HTTP: GET rest/api/user -> 401 
    DEBUG:atlassian.rest_client:HTTP: Response text -> <!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Basic Authentication Failure - Reason : AUTHENTICATED_FAILED</p><p><b>Description</b> The request has not been applied because it lacks valid authentication credentials for the target resource.</p><hr class="line" /><h3>Apache Tomcat/9.0.33</h3></body></html>
    ERROR:root:401 Client Error:  for url: https://conf.yoursystem.com/rest/api/user?username=name
    

    The response body may include some information on the reason:

    HTTP Status 401 – Unauthorized

    Type Status Report

    Message Basic Authentication Failure - Reason : AUTHENTICATED_FAILED

    Description The request has not been applied because it lacks valid authentication credentials for the target resource.

    The reason AUTHENTICATED_FAILED suggests something is likely wrong with your credentials. If you want to dig deeper into that, you can use this SO answer to also display the headers that are being sent with your request.

    However, if your reason is AUTHENTICATION_DENIED the problem is likely the following: If you have too many failed authentication attempts in a row, a CAPTCHA challenge is triggered, and this error will occur until the Failed Login Count is reset. This can easily happen when you are developing a script and test it frequently. To remedy this, either open a browser and manually (re-)logon to Confluence, completing the CAPTCHA, or resolve it from the Confluence User Management.