2009-11-01 33 views
3

我试图使用http://www.jongsma.org/gc/scripts/ofx-ba.py从wachovia获取我的银行帐户信息。没有运气,我决定我只是尝试手动构建一些请求数据使用this example使用python获取一些ofx数据

所以,我有这个文件,我想用作请求数据。让我们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> 

然后,在python,我尝试:

>>> 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) 

这个命令给了我500 this traceback。我不知道我的要求有什么问题。

访问没有数据链接和标题不关心,

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

产生了同样的事情,直接访问that url

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

这是很明显的,但只是一个观察。关于这个问题的一切似乎都很过时。希望能够编写一个简单的Python模块来开源。也许已经有一些我已经找不到的东西了?

EDIT - 如果我使上述信息的平坦映射:

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'} 

,然后用urlencode它,使该请求与作为数据

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

也许它与行结局有关,我使用Linux和获得/ n在哪里,也许我需要/ r/n ...不,这不是唯一的问题,如果它是一个。 –

回答

0

可能只是身份验证? (或缺乏它?)

+0

不这么认为。 –

2

问题是您以前曾将文件中的数据直接作为数据参数传递给Request。您正在阅读的文件包含您应该发送的标题和数据。您现在需要单独提供标题和数据。

HTTP错误403意味着请求正确,但服务器拒绝响应。您是否已经注册并安排了使用您尝试访问的Web服务的权限?如果是这样,那么在提出请求之前您需要执行一些身份验证?

+0

所以,用urlencode只对水平,所以如果我有一个快译通,''data''我会映射以下数据[“包括”] =“Y” Ÿ 做这样的当我尝试构建整个字典,urlencode并发布到该URL时,事情导致我发出“请求不允许”的提示。该页面似乎意味着请求是通过ofxsgml http://www.ofx.net/OFXExamplesPage/OFXExamples.aspx进行的......我看不出如何发送结构化数据。 –

+0

我看了一下这个例子并编辑了我的答案。 –