'Twitter: Correctly uploading a new profile picture

The code below is what I use to upload a profile picture but I get the following error:

def get_image_bytes():
    file_size = os.path.getsize('./image/example.jpg')
    return file_size

def get_image_raw():
    with open("./image/example.jpg", "rb") as img_file:
        enc_image = img_file.read()
    return enc_image

def get_media_id():
    file_bytes = get_image_bytes();
    resp = httpx.post(f'https://upload.twitter.com/i/media/upload.json?command=INIT&total_bytes={file_bytes}&media_type=image/jpeg', headers=general_headers)
    return resp.json()['media_id_string']

def append_image():
    media_id = get_media_id()
    resp = httpx.post(f'https://upload.twitter.com/i/media/upload.json?command=APPEND&media_id={media_id}&segment_index=0&media={get_image_raw()}', headers=webkit_headers)
    return media_id

def update_profile():
    media_id = append_image()
    resp = httpx.post(f'https://upload.twitter.com/i/media/upload.json?command=FINALIZE&media_id={media_id}', headers=general_headers)
    print(resp.json())

update_profile()

Error:

{'request': '/i/media/upload.json', 'error': 'Segments do not add up to provided total file size.'}

I don't know how twitter wants to receive the image binary. I've heard word that they expect chunks but I've tried almost everything. When uploading a new profile picture I do see that they crop the image maybe this can be a reason why but I am to no avail at the moment. My image is under 5mb by the way.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source