سؤال

كنت أحاول استخدام http://www.jongsma.org/gc/scripts/ofx-ba.py. للاستيلاء على معلومات حسابي المصرفي من Wachovia. عدم وجود حظ، قررت أن أحاول فقط إنشاء بعض البيانات يدويا باستخدام هذا المثال

لذلك، لدي هذا الملف الذي أريد استخدامه كبيانات طلب. دعونا نسميها 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>

ثم، في بيثون، أحاول:

>>> 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 و هذا trureback.. وبعد أتساءل ما هو الخطأ في طلبي.

زيارة عنوان 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>.

هذا واضح جدا ولكن مجرد ملاحظة. يبدو أن كل شيء في هذا الموضوع قديم جدا. على أمل كتابة وحدة بيثون 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>
هل كانت مفيدة؟

المحلول

يمكن أن تكون مجرد مصادقة؟ (أو تفتقر إلى Therof؟)

نصائح أخرى

كانت المشكلة أنك كنت تمر سابقا في البيانات من ملفك مباشرة كمعلمة البيانات إلى Request. وبعد يحتوي الملف الذي تقرأ به في كل من الرؤوس والبيانات التي يجب إرسالها. كنت بحاجة لتزويد الرؤوس والبيانات بشكل منفصل كما فعلت الآن.

خطأ HTTP 403 يعني أن الطلب كان صحيحا ولكن الخادم يرفض الاستجابة لها. هل قمت بالفعل بالتسجيل وترتيب إذن لاستخدام خدمة الويب التي تحاول الوصول إليها؟ إذا كان الأمر كذلك هل هناك بعض المصادقة التي تحتاج إلى القيام بها قبل تقديم الطلب؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top