web-dev-qa-db-fra.com

Comment spécifier python demande http put body?

J'essaie de réécrire un ancien code python avec le module de requêtes. Le but est de télécharger une pièce jointe. Le serveur de messagerie nécessite les spécifications suivantes:

https://api.elasticemail.com/attachments/upload?username=yourusername&api_key=yourapikey&file=yourfilename

Ancien code qui fonctionne:

h = httplib2.Http()        
        resp, content = h.request('https://api.elasticemail.com/attachments/upload?username=omer&api_key=b01ad0ce&file=tmp.txt', 
        "PUT", body=file(filepath).read(), 
        headers={'content-type':'text/plain'} )

N'a pas trouvé comment utiliser la partie du corps dans les requêtes.

J'ai réussi à faire ce qui suit:

 response = requests.put('https://api.elasticemail.com/attachments/upload',
                    data={"file":filepath},                         
                     auth=('omer', 'b01ad0ce')                  
                     )

Mais ne savez pas comment spécifier la partie du corps avec le contenu du fichier.

Merci de votre aide. Omer.

27
omer bach

Citant de la docs

données - (facultatif) Dictionnaire ou octets à envoyer dans le corps de la demande .

Donc cela devrait fonctionner (non testé):

 filepath = 'yourfilename.txt'
 with open(filepath) as fh:
     mydata = fh.read()
     response = requests.put('https://api.elasticemail.com/attachments/upload',
                data=mydata,                         
                auth=('omer', 'b01ad0ce'),
                headers={'content-type':'text/plain'},
                params={'file': filepath}
                 )
54
raben

J'ai fait fonctionner cette chose en utilisant Python et son module de demande. Avec cela, nous pouvons fournir un contenu de fichier comme valeur d'entrée de page. Voir le code ci-dessous,

import json
import requests

url = 'https://Client.atlassian.net/wiki/rest/api/content/87440'
headers = {'Content-Type': "application/json", 'Accept': "application/json"}
f = open("file.html", "r")
html = f.read()

data={}
data['id'] = "87440"
data['type']="page"
data['title']="Data Page"
data['space']={"key":"AB"}
data['body'] = {"storage":{"representation":"storage"}}
data['version']={"number":4}

print(data)

data['body']['storage']['value'] = html

print(data)

res = requests.put(url, json=data, headers=headers, auth=('Username', 'Password'))

print(res.status_code)
print(res.raise_for_status())

N'hésitez pas à demander si vous avez un doute.


NB : Dans ce cas, le corps de la requête est passé au json kwarg.

3
Ashfaq