Update page via API does not work with python

Charlie Misonne
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
April 8, 2024

Hi dear community,

I am trying to update a Confluence page with python. At first I was trying to use the Atlassian python library but I kept getting a 415 unsupported media type error.
I found this bug report so I decided to bypass the library and build a regular PUT request in Python just like Atlassian has documented on https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-page/#api-pages-id-put

I'm still getting the 415. It works fine with curl so I'm wondering: does this work for anyone?

Code I'm using:

 

def update_page():

    auth = HTTPBasicAuth("example@email.com", "supersecrettoken")

    headers = {

        "Accept": "application/json",

        "Content-Type": "application/json"

    }

    payload = json.dumps({

        "id": "240156673",

        "status": "current",

        "title": "My Page Title",

        "body": {

            "representation": "storage",

            "value": "Hello World"

        },

        "version": {

            "number": 5,

            "message": "new version"

  }

    })

    print(payload)

    response = requests.put(

        "http://company.atlassian.net/wiki/api/v2/pages/240156673",

        json=payload,

        headers={

        "Accept": "application/json",

        "Content-Type": "application/json"},

        auth=auth

        )

   
    print(response.status_code)

    print(response.request.body)

    print(response.request.headers)

    print(json.dumps(json.loads(response.text), sort_keys=True, indent=4, separators=(",", ": ")))



status = update_page()

The result is:

{
"errors": [
{
"code": "UNSUPPORTED_MEDIA_TYPE",
"detail": null,
"status": 415,
"title": "org.springframework.web.HttpMediaTypeNotSupportedException: Content type '' not supported"
}
]
}

 And what I think is very strange:

  • response.request.headers does not include the Content-Type sender I'm sending
  • response.request.body returns 'None'

When sending the request to https://httpbin.org/anything instead I do get my header and body returned.

 

2 answers

0 votes
Dalia El-Dib April 27, 2024

Have you found the resolution?

0 votes
marc -Collabello--Phase Locked-
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
April 10, 2024

Hi @Charlie Misonne ,

maybe you need to replace the line

```

json=payload,

```

with

```

data=payload,

```

as you've done a `json.dumps()` call.

Charlie Misonne
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
April 10, 2024

thanks for pointing that out.

I had been playing around with the different options before but json=payload or data=payload both return a 415.

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events