Problemas para enviar un archivo a Imgur

Estoy tratando de usar el libón de solicitudes de python para subir una imagen a Imgur utilizando la imgur api . El api devuelve un 400, diciendo que el archivo no es un tipo de archivo compatible o está dañado. No creo que la imagen esté dañada (puedo verla bien localmente), y he probado .jpg , .jpeg y .png . Aquí está el código:

 api_key = "4adaaf1bd8caec42a5b007405e829eb0" url = "http://api.imgur.com/2/upload.json" r = requests.post(url, data={'key': api_key, 'image':{'file': ('test.png', open('test.png', 'rb'))}}) 

El mensaje de error exacto:

 {"error":{"message":"Image format not supported, or image is corrupt.","request":"\/2\/upload.json","method":"post","format":"json","parameters":"image = file, key = 4adaaf1bd8caec42a5b007405e829eb0"}} 

Déjame saber si puedo proporcionar más información. Soy bastante verde con Python, y espero que sea un simple error, ¿alguien podría explicar qué?

Solo estoy adivinando, pero mirando el imgur api, parece que la imagen debería ser solo los datos del archivo, mientras que la biblioteca de solicitudes lo está envolviendo en un par de valores clave (por lo tanto, la respuesta muestra “imagen = archivo”)

Probaría algo como:

 import base64 api_key = "4adaaf1bd8caec42a5b007405e829eb0" url = "http://api.imgur.com/2/upload.json" fh = open('test.png', 'rb'); base64img = base64.b64encode(fh.read()) r = requests.post(url, data={'key': api_key, 'image':base64img}) 

¿Has intentado ser explícito con algo como lo siguiente ?:

 from base64 import b64encode requests.post( url, data = { 'key': api_key, 'image': b64encode(open('file1.png', 'rb').read()), 'type': 'base64', 'name': 'file1.png', 'title': 'Picture no. 1' } ) 

Tal vez desee abrir (‘test.png’, ‘rb’). Read () ya que open (‘test.png’, ‘rb’) es un objeto de archivo en lugar del contenido del archivo?