2017-12-07 4 views
0

)次のPythonコードがあります。私はいくつかのデータをSAPシステムに送信しようとしています。私はセッションを開いた。セッションからcsrf-tokenの値を取得するにはどうすればよいですか? client.cookies['csrftoken']を使用して検索しようとしましたが、CSRFトークンが存在しないか、正しいキー名を使用してCSRFトークン値を取得できないため、エラーが発生する可能性があります。CSRFトークンフロースルーリクエスト(SAPクライアント

私は単純なget要求でセッションを開かずに試してみましたが、CSRFトークン値を取得できましたが、トークンが保持されていないと考えてセッションを維持する必要があることがわかりましたトークン値。

印刷print client.cookies<RequestsCookieJar[<Cookie sap-usercontext=sap-client=100 for 34.239.8.24/>]>となり、印刷はprint.client.headersとなり、{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.9.1'}となります。ここからCSRFトークンを見つけるにはどうすればよいですか?

URL = "https://34.239.8.24:44300/sap/opu/odata/sap/ZRECEASY_PO_GL_POST_SRV/ZRECEASY_PO_GL_POSTSet" 
    auth_get_po_data ='S4H_FIN','Welcome1' 

    data = { "BUKR": 1710,"EBELN": 4500000004, "EBELP": 10,"EINDT": "20161103","OPEN_AMT": "3,000.00","PERC_REC_AMT": 0,"REC_AMT": 0, "ITEM_AMT": "3,000.00","INV_AMT": 0,"WAERS": "USD", "UPD_BY": "","UPD_DAT": "", "INV_APP": "", "SAKTO": "null", "KOSTL": "null", "AUFNR": "", "DESC": "", "KUNNR_NAM": "", "KUNNR": "", "COMMENT": "" } 

    client = requests.session() 

    client.get(URL, verify=False) 
    print client.cookies 
    csrftoken = client.cookies['csrftoken'] 
    print csrftoken 

    login_data = dict(username="S4H_FIN", password="Welcome1", csrftoken=csrftoken, next='/') 
    r = client.post(URL, data=data, auth=auth_get_po_data, verify=False, headers=dict(Referer=URL)) 
    print (r.text) 

答えて

0

このようなトークンは、以前のABAPサーバーへのサービス呼び出しによって取得できます。そのためには、まず変更されない呼び出し(GET、HEAD、OPTIONS)で、クライアントはHTTPヘッダーX-CSRFトークンを値Fetchに設定してこのトークンを取得する必要があります。 CSRFトークンは、ABAPサーバによって同じヘッダに返され、ヘッダX-CSRFトークンを使用するサーバ状態変更後のコールに使用できます。 (SAPオンラインヘルプに記載されています) https://help.sap.com/saphelp_nw74/helpdata/de/55/74ed6c93654ee4999b4d07cdda532c/frameset.htm 最高のお礼、 Andre

関連する問題