Получить некоторые данные ofx с помощью Python - PullRequest
3 голосов
/ 01 ноября 2009

Я пытался использовать http://www.jongsma.org/gc/scripts/ofx-ba.py для получения информации о моем банковском счете из Ваховии. Не повезло, я решил, что просто попробую вручную построить некоторые данные запроса, используя этот пример

Итак, у меня есть этот файл, который я хочу использовать в качестве данных запроса. Давайте назовем это 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, а этот след . Интересно, что не так с моей просьбой.

Посещение URL без данных и без заботы о заголовках,

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

дает то же самое, что и посещение , с которого 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>

Ответы [ 2 ]

2 голосов
/ 01 ноября 2009

Проблема заключалась в том, что вы ранее передавали данные из вашего файла непосредственно в качестве параметра данных в Request. Файл, в котором вы читали, содержит как заголовки, так и данные, которые вы должны отправлять. Вы должны были предоставить заголовки и данные отдельно, как вы это сделали сейчас.

Ошибка HTTP 403 означает, что запрос был верным, но сервер отказывается отвечать на него. Вы уже зарегистрировались и получили разрешение на использование веб-службы, к которой вы пытаетесь получить доступ? Если да, то есть ли какая-либо аутентификация, которую вам нужно сделать перед выполнением запроса?

0 голосов
/ 01 ноября 2009

может быть просто аутентификация? (или не хватает?)

...