Pergunta

Eu estava tentando usar http://www.jongsma.org/ gc / scripts / ofx-ba.py para pegar informações da minha conta bancária de Wachovia. Não ter sorte, eu decidi que eu iria apenas tentar construir manualmente alguns dados de solicitação usando este exemplo

Então, eu tenho esse arquivo que eu quero usar como dados de pedido. Vamos chamá-lo 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>

Então, em python, eu tento:

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

Este comando dá-me um 500 e este traceback . Pergunto-me o que está errado com o meu pedido.

Visitando o url sem dados e nenhuma preocupação com cabeçalhos,

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

produz a mesma coisa que visitam que url diretamente ,

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

Isso é muito óbvio, mas apenas uma observação. Tudo sobre o assunto parece estar muito desatualizado. Na esperança de escrever um módulo python ofx simples de código aberto. Talvez já existe algo desenvolvido que eu não conseguiram encontrar?

Editar - Se eu fizer um mapeamento plana das informações acima:

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

e, em seguida, urlencode-lo e fazer o pedido com que, como os dados

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>
Foi útil?

Solução

poderia apenas ser autenticado? (Ou falta dela?)

Outras dicas

O problema era que você estava anteriormente passando os dados do seu arquivo diretamente como o parâmetro de dados para o Request. O arquivo que você estava lendo em contém os cabeçalhos e os dados que devem ser enviados. Você necessário para fornecer os cabeçalhos e os dados separadamente, como você tem feito agora.

HTTP erro 403 significa que o pedido foi correta, mas o servidor está se recusando a responder a ela. Você já se inscreveu e permissão para usar o serviço web que você está tentando acessar arranjado? Se assim há alguma autenticação que você precisa fazer antes de fazer o pedido?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top