2013-02-14 6 views
1

J'essaie d'écrire un script pour me connecter par programme à Google Finance, afficher mon portfolio et afficher les résultats sur mon bureau. J'utilise le module requests, actuellement bloqué sur la partie 'connexion'.CookieConflictError - APISID lors de la tentative de connexion par programmation à Google Finance

Je continue à obtenir cette erreur requests.cookies.CookieConflictError: There are multiple cookies with name, 'APISID'

Voici le script entier , l'erreur jette sur line 48. Je suppose qu'il a quelque chose à voir avec requests keep-alive et la connexion ne se recycle pas correctement?

#!/usr/bin/env python 

import getpass 
import re 
import requests 

email = raw_input("Enter your Google username: ") 
password = getpass.getpass("Enter your password: ") 

session = requests.Session() 

# Define URLs 
login_page_url = 'https://accounts.google.com/ServiceLogin?passive=true&service=finance' 
authenticate_url = 'https://accounts.google.com/ServiceLoginAuth?service=finance' 
gf_home_page_url = 'http://www.google.com/finance/portfolio' 

login_page_contents = session.get(login_page_url).text 

# Find GALX value 
galx_match_obj = re.search(r'name="GALX"\s*value="([^"]+)"', login_page_contents, re.IGNORECASE) 
galx_value = galx_match_obj.group(1) if galx_match_obj.group(1) is not None else '' 

# Find DSH value 
dsh_match_obj = re.search(r'id="dsh"\s*value="([^"]+)"', login_page_contents, re.IGNORECASE) 
dsh_value = dsh_match_obj.group(1) if dsh_match_obj.group(1) is not None else '' 

# Set up login credentials 
login_params = { 
    'Email': email, 
    'Passwd': password, 
    'continue': 'http://www.google.com/finance/portfolio', 
    'followup': 'http://www.google.com/finance/portfolio', 
    'service': 'finance', 
    'GALX': galx_value, 
    'pstMsg': 0, 
    'dnConn': '', 
    'checkConnection': '', 
    'timeStmp': '', 
    'secTok': '', 
    'bgresponse': 'js_disabled', 
    'PersistentCookie': 'yes' 
} 

print galx_value 
print dsh_value 

# Login 
r = session.post(authenticate_url, params=login_params) # <- Error thrown here 
print r.text 
exit 

Traceback:

Traceback (most recent call last): 
    File "crawl.py", line 48, in <module> 
    r = session.post(authenticate_url, params=login_params) 
    File "/Users/nathan/Development/Scripts/google-finance-crawler/requests/sessions.py", line 358, in post 
    return self.request('POST', url, data=data, **kwargs) 
    File "/Users/nathan/Development/Scripts/google-finance-crawler/requests/sessions.py", line 312, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/Users/nathan/Development/Scripts/google-finance-crawler/requests/sessions.py", line 426, in send 
    history = [resp for resp in gen] if allow_redirects else [] 
    File "/Users/nathan/Development/Scripts/google-finance-crawler/requests/sessions.py", line 163, in resolve_redirects 
    resp.cookies.update(cookiejar) 
    File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_abcoll.py", line 494, in update 
    self[key] = other[key] 
    File "/Users/nathan/Development/Scripts/google-finance-crawler/requests/cookies.py", line 246, in __getitem__ 
    return self._find_no_duplicates(name) 
    File "/Users/nathan/Development/Scripts/google-finance-crawler/requests/cookies.py", line 285, in _find_no_duplicates 
    raise CookieConflictError('There are multiple cookies with name, %r' % (name)) 
requests.cookies.CookieConflictError: There are multiple cookies with name, 'APISID' 
+0

Pouvez-vous nous donner le * complet * retraçage de cette exception? –

+0

oui, voir mise à jour :) merci –

Répondre

3

C'est un bogue dans requests, voir issue 1189.

Le correctif actuel proposé est simplement supprimer la ligne 163 de requests/sessions.py:

resp.cookies.update(cookiejar) 
+0

C'est la mauvaise ligne à supprimer mais c'est le bon problème. (Note: Je suis le "génie" qui a fait le changement et la demande de traction suivante pour le réparer.) –

+0

@ sigmavirus24: Je sais: -P J'utilise le numéro de ligne de retraçage OP ici, pas celui de votre patch; Je suppose que quelques autres choses ont changé dans ce fichier depuis que vous avez écrit votre patch .. :-) –

+0

@ sigmavirus24: oops, non, je vois l'erreur maintenant. Corrigée. –

Questions connexes