【问题标题】:Grab some ofx data with python用python抓取一些ofx数据
【发布时间】:2010-12-12 00:18:44
【问题描述】:

我试图使用http://www.jongsma.org/gc/scripts/ofx-ba.py 从美联银行获取我的银行账户信息。运气不好,我决定尝试使用this example手动构造一些请求数据

所以,我有这个文件,我想用作请求数据。我们称它为 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。我想知道我的请求有什么问题。

访问没有数据且不关心标题的url,

>>> 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 ofx模块来开源。也许已经开发了一些我还没有找到的东西?

编辑 - 如果我对上述信息进行平面映射:

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>

【问题讨论】:

  • 也许它与行尾有关,我使用 Linux 并在可能需要 /r/n 的地方获取 /n ...不,如果它根本不是唯一的问题。

标签: python xml urllib2 sgml ofx


【解决方案1】:

问题在于您之前将文件中的数据直接作为数据参数传递给Request。您正在读取的文件包含标题和您应该发送的数据。您需要像现在一样分别提供标题和数据。

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

【讨论】:

  • 所以,urlencode 只需要一个级别,所以如果我有一个 dict,data 我会映射以下数据['INCLUDE']='Y' Y INCTRAN> 当我尝试构建整个 dict、urlencode 并发布到该 url 时,做这种事情让我找到了Request not allowed。该页面似乎暗示该请求是使用 ofxsgml ofx.net/OFXExamplesPage/OFXExamples.aspx 发出的......我看不出如何发送结构化数据。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2012-03-22
    • 1970-01-01
    • 2017-09-04
    • 2019-05-30
    • 2013-05-23
    • 2020-12-05
    相关资源
    最近更新 更多