2009-11-01 22 views
3

J'essayais d'utiliser http://www.jongsma.org/gc/scripts/ofx-ba.py pour récupérer les informations de mon compte bancaire de wachovia. N'ayant pas de chance, j'ai décidé que j'essaierais de construire manuellement quelques données de demande en utilisant this examplePrenez quelques données ofx avec python

Donc, j'ai ce fichier que je veux utiliser comme données de requête. Appelons-le req.ofxsgml:

FXHEADER:100 
DATA:OFXSGML 
VERSION:102 
SECURITY:NONE 
ENCODING:USASCII 
CHARSET:1252 
COMPRESSION:NONE 
OLDFILEUID:NONE 
NEWFILEUID:NONE 

<OFX> 
    <SIGNONMSGSRQV1> 
    <SONRQ> 
     <DTCLIENT>20071015021529.000[-8:PST] 
     <USERID>TheNameIuseForOnlineBanking 
     <USERPASS>MySecretPassword 
     <LANGUAGE>ENG 
     <FI> 
     <ORG>Wachovia 
     <FID>4309 
     </FI> 
     <APPID>Money 
     <APPVER>1700 
    </SONRQ> 
    </SIGNONMSGSRQV1> 
    <BANKMSGSRQV1> 
    <STMTTRNRQ> 
     <TRNUID>438BD6F4-2106-4C88-8DE5-7625915A2FC0 
     <STMTRQ> 
     <BANKACCTFROM> 
      <BANKID>061000227 
      <ACCTID>101555555555 
      <ACCTTYPE>CHECKING 
     </BANKACCTFROM> 
     <INCTRAN> 
      <INCLUDE>Y 
     </INCTRAN> 
     </STMTRQ> 
    </STMTTRNRQ> 
    </BANKMSGSRQV1> 
</OFX> 

Puis, en python, je tente:

>>> import urllib2 
>>> query = open('req.ofxsgml').read() 
>>> request = urllib2.Request('https://pfmpw.wachovia.com/cgi-forte/fortecgi?servicename=ofx&amp;pagename=PFM', 
           query, 
           { "Content-type": "application/x-ofx", 
           "Accept": "*/*, application/x-ofx" 
           }) 
>>> f = urllib2.urlopen(request) 

Cette commande me donne 500 et this traceback. Je me demande ce qui ne va pas avec ma demande.

visitant l'URL sans données et aucun souci pour les en-têtes,

>>> f = urllib2.urlopen('https://pfmpw.wachovia.com/cgi-forte/fortecgi?servicename=ofx&amp;pagename=PFM') 

donne la même chose que la visite directement that url,

HTTPError: HTTP Error 403: <BODY><H1>Request not allowed</H1></BODY>. 

Ceci est assez évident mais juste une observation. Tout sur le sujet semble être assez démodé. Espérant écrire un simple module python ofx à open source. Peut-être qu'il y a déjà quelque chose de développé que je n'ai pas réussi à trouver?

EDIT - Si je fais une correspondance à plat des informations ci-dessus:

d = {'ACCTID': '10555555', 
'ACCTTYPE': 'CHECKING', 
'APPID': 'Money', 
'APPVER': '1700', 
'BANKID': '061000227', 
'DTCLIENT': '20071015021529.000[-8:PST]', 
'FID': '4309', 
'INCLUDE': 'Y', 
'LANGUAGE': 'ENG', 
'ORG': 'Wachovia', 
'TRNUID': 'I18BD6F4-2006-4C88-8DE5-7625915A2FC0', 
'USERID': 'm48m40', 
'USERPASS': '12397'} 

puis urlencode et faire la demande avec ce que les données

query=urllib.urlencode(d) 
request = urllib2.Request('https://pfmpw.wachovia.com/cgi-forte/fortecgi?servicename=ofx&amp;pagename=PFM', 
           query, 
           { "Content-type": "application/x-ofx", 
           "Accept": "*/*, application/x-ofx" 
           }) 

f = urllib2.urlopen(request) 
HTTP Error 403: <BODY><H1>Request not allowed</H1></BODY> 
+0

Peut-être que cela a à voir avec les fins de ligne, moi en utilisant Linux et obtenir/n où peut-être j'ai besoin/r/n ... nope ce n'est pas le seul problème si c'était un. –

Répondre

0

pourrait être l'authentification? (ou manque de?)

+0

ne le pense pas. –

2

Le problème était que vous transmettiez précédemment les données de votre fichier directement en tant que paramètre de données au Request. Le fichier que vous lisiez contient à la fois les en-têtes et les données que vous devriez envoyer. Vous deviez fournir les en-têtes et les données séparément comme vous l'avez fait maintenant.

L'erreur HTTP 403 signifie que la demande était correcte mais que le serveur refuse de répondre. Avez-vous déjà signé et accepté l'autorisation d'utiliser le service Web auquel vous essayez d'accéder? Si oui, y a-t-il une authentification que vous devez faire avant de faire la demande?

+0

Ainsi, urlencode ne prend niveau, donc si j'avais un dict, '' data'' Je mapper les données suivantes [ 'INCLUDE'] = 'Y' Y Faire ce genre de chose m'a conduit à une «Demande non autorisée» quand j'ai essayé de construire toute la dict, urlencode et de poster à cette URL. Cette page semble suggérer que la demande est faite avec le http://www.ofx.net/OFXExamplesPage/OFXExamples.aspx ofxsgml ... Je ne vois pas comment on peut envoyer des données structurées. –

+0

J'ai regardé l'exemple et édité ma réponse. –