2015-04-28 1 views
2

J'essaie de demander une ressource RestAPI plusieurs fois. Pour gagner du temps, j'essaie d'utiliser urllib3.HTTPSConnectionPool au lieu de urllib2. Cependant, il ne cesse de me jeter l'erreur suivante:urllib3.HTTPSConnectionPool Erreur

Traceback (most recent call last): 
    File "LCRestapi.py", line 135, in <module> 
    listedLoansFast(version, key, showAll='false') 
    File "LCRestapi.py", line 55, in listedLoansFast 
    pool.urlopen('GET',url+resource,headers={'Authorization':key}) 
    File "/Library/Python/2.7/site-packages/urllib3/connectionpool.py", line 515, in urlopen 
    raise HostChangedError(self, url, retries) 
urllib3.exceptions.HostChangedError: HTTPSConnectionPool(host='https://api.lendingclub.com/api/investor/v1/loans/listing?showAll=false', port=None): Tried to open a foreign host with url: https://api.lendingclub.com/api/investor/v1/loans/listing?showAll=false 

J'utilise python-2.7.6

Voici mon code:

manager = urllib3.PoolManager(1) 
url = 'https://api.lendingclub.com/api/investor/v1/loans/listing?showAll=false' 
pool = urllib3.HTTPSConnectionPool(url+resource, maxsize=1, headers={'Authorization':key}) 
r = pool.request('GET',url+resource) 
print r.data 

Merci pour l'aide!

Répondre

2

Le problème est que vous créez un PoolManager mais que vous ne l'utilisez jamais. Au lieu de cela, vous créez également un HTTPSConnectionPool (qui est lié à un hôte spécifique) et l'utilise à la place du PoolManager. Le PoolManager gère automatiquement les objets HTTPSConnectionPool en votre nom, donc vous n'avez pas à vous en préoccuper.

Cela devrait fonctionner:

# Your example called this `manager` 
http = urllib3.PoolManager() 

url = 'https://api.lendingclub.com/api/investor/v1/loans/listing?showAll=false' 
headers = {'Authorization': key} 

# Your example did url+resource, but let's assume the url variable 
# contains the combined absolute url. 
r = http.request('GET', url, headers=headers) 
print r.data 

Vous pouvez spécifier la taille de la PoolManager si vous préférez, mais vous ne devriez pas avoir à moins que vous essayez de faire quelque chose d'inhabituel avec la limitation des ressources à un pool de threads.

+0

Excellente réponse –