2017-07-31 3 views
0

D'une requête POST à ​​l'API Vimeo, j'obtiens un objet JSON codé comme HTTPResponse.De HTTPResponse à str en Python 3.6

r = http.request('POST', 'https://api.vimeo.com/oauth/authorize/client?grant_type=client_credentials', headers={'Authorization': 'basic XXX'}) 

Je ne trouve pas un moyen de convertir le HTTPResponse à un objet str ou Json. Dans stackoverflow j'ai trouvé et essayé les options suivantes:

json.loads(r.decode('utf-8')) 

json.loads(r.readall().decode('utf-8')) 

str(r, 'utf-8') 

mais aucun d'eux n'a fonctionné.

Pouvez-vous aider?

Merci

+0

est-il pas un '' r.text' ou attribut r.body'? quelle est la sortie de 'dir (r)' – RSHAP

+0

Salut @RSHAP aucun attribut r.text ou r.body. la sortie de dir (r) est [ 'CONTENT_DECODERS', 'REDIRECT_STATUSES', '__abstractmethods__', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', ' __doc__ ' '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', ' __init_subclass__ ', ' __iter__ ', ' __le__ ', ' __lt__ ', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', [...] – Gusepo

Répondre

2

essayer avec le module demandes

import requests 
import json 

r=requests.post('https://api.vimeo.com/oauth/authorize/client?grant_type=client_credentials', varData, headers={'Authorization': 'basic XXX'}) 
response = json.loads(r.text) 
2

De Python docs (Souligné par l'auteur):

class http.client.HTTPResponse(sock, debuglevel=0, method=None, url=None)

classe dont les instances sont renvoyées lors de la connexion réussie. Non instancié directement par l'utilisateur.

Et aussi:

Voir aussi le paquet demandes est recommandé pour une interface client HTTP niveau supérieur.

Donc, vous êtes probablement mieux d'utiliser requests directement. Après avoir fait votre demande, utilisez json.loads(r.text).

0

L'utilisation peut utiliser le module http.client. Exemple:

import http.client 
import json 
conn = http.client.HTTPConnection('https://api.vimeo.com/oauth/authorize/client?grant_type=client_credentials') 
headers = {'Authorization': 'basic XXX'} 
params = varData 
conn.request('POST', '', params, headers) 
response = conn.getresponse() 
content = bytes.decode(response.read(), 'utf-8') #return string value 
res_map = json.loads(content) #if content is json string 

Pour plus d'informations, reportez-vous ceci: http.client